Как загрузить представление из альтернативного каталога в Laravel 4
В корневом каталоге моего приложения Laravel 4 у меня есть папка themes
. Внутри themes
папка, у меня есть default
и azure
.
Как я могу получить доступ к просмотру из этого themes/default
папка в определенном маршруте.
Route::get('{slug}', function($slug) {
// make view from themes/default here
});
Моя структура каталогов:
- приложение
-- темы
--- по умолчанию
--- лазурный
Мне нужно загрузить представления из папки localhost/laravel/app/themes/default
. Пожалуйста, объясните это.
4 answers
Это вполне возможно с Laravel 4. То, что вам нужно, на самом деле является средой просмотра. Вы можете зарегистрировать подсказки пространства имен или просто дополнительные местоположения, которые также будут каскадироваться в finder. Взгляните здесь
Вы бы добавили местоположение примерно так:
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');
Затем вызовите представление, как по умолчанию,
return View::make('page');
Это приведет к отображению page.php
или page.blade.php
файла из папки project_directory/app/themes/defualt
.
Я разработал пакет тем для laravel 5 с такими функциями, как:
- Просмотры и разделение ресурсов в папках тем
- Наследование темы: Расширяйте любую тему и создавайте иерархии тем
Попробуйте здесь: igaster/laravel-тема
\View::addLocation($directory);
работает нормально, но новый правильный способ сделать это - использовать loadViewsFrom($path, $namespace)
(доступно у любого поставщика услуг).