【问题标题】:Override Laravel 4 Package view覆盖 Laravel 4 包视图
【发布时间】:2013-07-06 21:27:25
【问题描述】:

我想创建我的自定义 CMS,并且我想创建一个用户包,其中我将拥有一个带有 showProfile() 函数的控制器。但问题是我想轻松编辑此配置文件视图。所以我想知道是否有办法创建级联视图。就像如果 app/views/ 中没有文件,那么 vendor/vendor/package/src/views 将被加载。我希望你有这个想法:)

编辑:

我设法让它工作。我必须在我的 ServiceProvider 中为视图注册新的命名空间。 我把这段代码放到ServiceProvider:

\View::addNamespace('cmscore',array(app_path()./'views/packages/zaalbarxx/cmscore');

其中 zaalbarxx/cmscore 是供应商/包,而 cmscore 是我稍后可以在控制器中使用的命名空间,例如 View::make('cmscore::index')。我在 $this->package() 之前的 boot() 方法中添加了这段代码,这样应用程序/视图的优先级高于包/视图。效果很好。

【问题讨论】:

  • 很好,感谢您发布解决方案

标签: php frameworks laravel laravel-4


【解决方案1】:

这已经是可能的了,但是默认情况下它会查看vendor/package-name/src/views 的结构,但如果app/views/packages/package-name/ 中存在等效项,则会被选择。

【讨论】:

    【解决方案2】:

    如上所述,您应该已经可以加载包视图了。

    但是,您可以在app/config/view.php 中找到的数组中添加更多视图位置。

    另外,可以在运行时使用addLocation() 类中的addLocation() 方法添加视图路径。

    在服务提供者中使用该方法如下所示:

    $app['view.finder']->addLocation('/path/to/views');
    

    或应用中的任何位置:

    App::make('view.finder')->addLocation('/path/to/views');
    

    另外请注意,我最近回复了this question on cacheing view output,这可能会帮助您了解如果您选择沿着这条路线扩展 View 包的某些部分可能会如何工作。

    【讨论】:

    • 请注意,包视图目前只能级联到app/views,因为这个位置是从Illuminate\Support\ServiceProvider::package()硬编码的。
    • 是的,我从某个包加载视图没有问题。但我想在包中创建一个简单的视图,然后能够将它移动到应用程序/视图并扩展。还是我应该不在包中创建视图并强制用户在 app/views 中创建文件才能使用此 profile() 控制器方法?
    【解决方案3】:

    你不需要编写这个行为,如果你阅读 laravel 代码你会发现这是内置的......

    默认情况下,包将首先查找并 app/views/packages/package-name/(全部小写!即使包或作者有大写字母!在 windows 上不会被注意到,然后在 linux 上你会撞到墙上!)

    如果客户应用视图不存在,包视图将从包本身内部加载: vendor/author/package-name/src/views

    【讨论】:

    • 注意自定义路径不是...packages/package-name...,而是...packages/vendor/package-name...(注意vendor部分)。您可以使用php artisan view:publish vendor/package 命令发布包视图以进行修改。文档:laravel.com/docs/4.1/packages#package-views
    • 另一个陷阱:view:publish 命令有时会以标题大小写创建文件夹,例如app/views/packages/Vendor/Package。但这可能不会被服务器接收,您可能需要将文件夹重命名为 .../vendor/package。
    猜你喜欢
    • 2019-12-01
    • 2014-09-05
    • 2017-01-03
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多