Подтвердить что ты не робот

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

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

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

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

-app

- темы

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

--- лазурь

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

4b9b3361

Ответ 1

Здесь я не получаю доступ к моему проекту из папки 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.

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

  • Виды и разделение активов в папках тем.
  • Наследование объектов: расширение любой темы и создание темы hierarcies

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

Ответ 4

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