В моем корневом каталоге приложения 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 с такими функциями, как:
Попробуйте здесь: igaster / laravel-theme
\View::addLocation($directory);
отлично работает, но новый правильный способ сделать это – использовать loadViewsFrom($path, $namespace)
(доступно для любого поставщика услуг).