Как загрузить представление из альтернативного каталога в Laravel 4

В моем корневом каталоге приложения Laravel 4 у меня есть themes с папками. В папке themes , у меня есть default и azure . Как получить доступ к представлению из этой themes/default папки по themes/default в определенном маршруте.

 Route::get('{slug}', function($slug) { // make view from themes/default here }); 

Моя структура каталогов:

-приложение

–themes

—по умолчанию

— лазурь

Мне нужно загружать представления из localhost/laravel/app/themes/default . Пожалуйста, объясните это.

Это вполне возможно с Laravel 4. То, что вам нужно, на самом деле является средой просмотра. Вы можете зарегистрировать подсказки пространства имен или просто дополнительные места, которые искатель будет каскадно. Взгляните сюда

Вы бы добавили такое местоположение:

 View::addLocation('/path/to/your/views'); 

Это может быть проще, если вы импостелируете их, хотя на всякий случай у вас есть конфликтующие имена файлов, так как ваш путь добавляется к массиву, поэтому он пока каскадирует до тех пор, пока не найдет подходящее совпадение. Представления с именами загружаются синтаксисом двойного двоеточия.

 View::addNamespace('theme', '/path/to/themes/views'); return View::make('theme::view.name'); 

Вы также можете дать addNamespace массив путей просмотра вместо одного пути.

Здесь я не получаю доступ к моему проекту из public папки. Вместо этого я получаю доступ к самому корню проекта.

Я видел дискуссию на форуме об Using alternative path for views . Но я немного смущен этим. Обсуждаемое решение было,

Вы бы добавили такое location ,

 View::addLocation('/path/to/your/views'); 

Затем добавьте namespace для темы,

 View::addNamespace('theme', '/path/to/themes/views'); 

Затем сделайте это,

 return View::make('theme::view.name'); 

Каким будет значение для /path/to/ ?

Можно ли использовать один и тот же проект в другой операционной системе без изменения пути?

Да, мы можем сделать это, используя следующее:

Добавьте в app/start/global.php

  View::addLocation(app('path').'/themes/default'); View::addNamespace('theme', app('path').'/themes/default'); по  View::addLocation(app('path').'/themes/default'); View::addNamespace('theme', app('path').'/themes/default'); 

Затем вызовите вид, как по умолчанию,

  return View::make('page'); 

Это сделает файл page.php или page.blade.php из page.blade.php project_directory/app/themes/defualt .

Я разработал пакет тем для laravel 5 с такими функциями, как:

  • Просмотры и разделение активов в папках тем
  • Наследование темы: расширьте тему и создайте тему hierarcies

Попробуйте здесь: igaster / laravel-theme

\View::addLocation($directory); отлично работает, но новый правильный способ сделать это – использовать loadViewsFrom($path, $namespace) (доступно для любого поставщика услуг).