覆盖Laravel 4 Package视图


Override Laravel 4 Package view

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

编辑:

我设法做到了。我不得不在我的ServiceProvider中为视图注册新的命名空间。我把这个代码放给服务提供商:

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

其中zaalbarxx/cmscore是vendor/package,cmscore是我稍后可以在控制器中使用的命名空间,如View::make('cmcore::index')。我在boot()方法BEFORE$this->package()中添加了这段代码,因此通过这种方式,应用程序/视图的优先级高于包/视图。工作出色。

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

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

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

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

使用在服务提供商中看起来像这样的方法:

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

或应用程序中的任何位置:

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

另外请注意,我最近回答了这个关于缓存视图输出的问题,这可能有助于您了解如果您选择这样做,扩展视图包的某些部分可能会如何工作。

您不需要在中编程此行为,如果您阅读laravel代码,您将看到它是内置的…

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

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