29

在我的 Laravel 4 应用程序的根目录中,我有一个文件夹themes. 在themes文件夹内,我有defaultazure。如何themes/default在特定路线中从此文件夹访问视图。

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

我的目录结构:

-应用程序

--主题

- -默认

---天蓝色

我需要从localhost/laravel/app/themes/default文件夹加载视图。请解释一下。

4

4 回答 4

37

这完全可以在 Laravel 4 中实现。您所追求的实际上是视图环境。您可以注册命名空间提示或只是查找器也将级联的额外位置。看看这里

你会像这样添加一个位置:

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

但是,如果您为它们命名可能会更容易,以防万一您的文件名冲突,因为您的路径被附加到数组中,所以它只会级联到目前为止,直到找到合适的匹配。命名空间视图使用双冒号语法加载。

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

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

您还可以为 addNamespace 提供一个视图路径数组,而不是单个路径。

于 2013-09-23T08:42:04.230 回答
26

在这里,我没有从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,

    return View::make('page');

这将渲染page.phppage.blade.phpproject_directory/app/themes/defualt文件夹中归档。

于 2013-09-23T10:20:53.420 回答
2

我为 laravel 5 开发了一个主题包,其功能如下:

  • 主题文件夹中的视图和资产分离
  • 主题继承:扩展任何主题并创建主题层次结构

在这里试试:igaster/laravel-theme

于 2015-03-01T20:39:15.253 回答
0

\View::addLocation($directory);工作正常,但新的正确方法是使用loadViewsFrom($path, $namespace)(适用于任何服务提供商)。

于 2017-02-28T20:14:57.617 回答