【问题标题】:How to load view from alternative directory in Laravel 4如何从 Laravel 4 中的替代目录加载视图
【发布时间】:2013-09-28 02:01:14
【问题描述】:

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

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

我的目录结构:

-应用程序

--主题

---默认

---天蓝色

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

【问题讨论】:

    标签: php laravel laravel-4 namespaces


    【解决方案1】:

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

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

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

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

    View::addNamespace('theme', '/path/to/themes/views');
    
    return View::make('theme::view.name');
    

    您也可以给 addNamespace 一个视图路径数组而不是单个路径。

    【讨论】:

    • 删除了我的答案,这确实是正确的方法。
    • @Chirag 你能用我的视图位置(themes/default) 和路线解释一下吗?
    • 你必须用代码View::addNamespace('theme', '/path/to/themes/default');添加主题然后用代码return View::make('theme::view.name');来使用它
    • @lucip 请检查我更新的问题并给我详细的解释,而不是/path/to/
    • 这意味着你的路径是:app('path').'/../themes/default'
    【解决方案2】:

    这里我没有从 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');
    

    然后按默认方式调用view,

        return View::make('page');
    

    这将呈现来自project_directory/app/themes/defualt 文件夹的page.phppage.blade.php 文件。

    【讨论】:

    • 我很欣赏这篇文章,它有很多有用的信息!你能解释一下 View::addLocation() 和 View::addNamespace() 应该去哪里吗?我是否认为这需要创建一个 ServiceProvider?
    • 这在路由过滤器中不起作用有什么原因吗?我在那里试过,它在那里不起作用,但在 global.php 中起作用。
    • @pthurmond 为什么要将它放在路由过滤器中?
    • 这是答案stackoverflow.com/questions/27458439/… 完美描述
    【解决方案3】:

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

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

    在这里试试:igaster/laravel-theme

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2014-07-23
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 2014-11-13
        • 1970-01-01
        • 2022-01-26
        • 2013-07-20
        相关资源
        最近更新 更多