如何从Laravel 4中的备用目录加载视图

时间:2013-09-23 08:27:34

标签: php laravel laravel-4 namespaces

在我的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文件夹加载视图。请解释一下。

4 个答案:

答案 0 :(得分:37)

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

你要添加一个这样的位置:

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

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

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

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

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

答案 1 :(得分:26)

此处我无法从 public 文件夹访问我的项目。而不是这个我从项目根本身访问。

我看过有关 Using alternative path for views here的论坛讨论。但我对这一点感到困惑。讨论的解决方案是,

您可以添加 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.phpproject_directory/app/themes/defualt文件。

答案 2 :(得分:2)

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

  • 观点&主题文件夹中的资产分离
  • 主题继承:扩展任何主题并创建主题hierarcies

在此处试试:igaster/laravel-theme

答案 3 :(得分:0)

\View::addLocation($directory);运行正常,但新的正确方法是使用loadViewsFrom($path, $namespace)(可在任何服务提供商处使用)。