5

我想创建我的自定义 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() 方法中添加了这段代码,因此应用程序/视图优先于包/视图。工作出色。

4

3 回答 3

4

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

于 2013-07-09T12:24:53.800 回答
2

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

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

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

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

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

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

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

另请注意,我最近在缓存视图输出上回答了这个问题,这可能会帮助您了解如果您选择沿着这条路线扩展 View 包的某些部分可能会如何工作。

于 2013-07-09T12:36:38.677 回答
0

您不需要编写此行为,如果您阅读 laravel 代码,您会看到这是内置的......

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

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

于 2014-01-15T02:01:19.380 回答