Laravel中View Composer和Creator之间的区别?

Par*_*ars 27 php view laravel laravel-4

根据Laravel 4文档.

作曲家是:

视图组合器是在呈现视图时调用的回调或类方法.如果每次在整个应用程序中呈现视图时都希望绑定到给定视图的数据,则视图编辑器可以将该代码组织到单个位置.因此,视图编辑器可以像"视图模型"或"演示者"那样起作用.

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});
Run Code Online (Sandbox Code Playgroud)

创作者是:

视图创作者几乎完全像视图作曲家一样工作; 但是,在实例化视图时会立即触发它们.要注册视图创建者,请使用创建者方法

View::creator('profile', function($view)
{
    $view->with('count', User::count());
});
Run Code Online (Sandbox Code Playgroud)

所以问题是:有什么区别?

Hka*_*kan 59

使用时,View::creator您有机会覆盖控制器中的视图变量.像这样:

View::creator('layout', function($view) {
    $view->with('foo', 'bar');
});

// in controller
return View::make('layout')->with('foo', 'not bar at all');

// it's defined as 'not bar at all' in the view
Run Code Online (Sandbox Code Playgroud)

-

View::composer('hello', function($view) {
    $view->with('foo', 'bar');
});

// in controller
return View::make('hello')->with('foo', 'not bar at all');

// it's defined as 'bar' in the view
Run Code Online (Sandbox Code Playgroud)

  • 它应该包含在官方文档中。 (2认同)

Lau*_*nce 16

我花了一段时间来解决这个问题,我不得不深入研究源代码来解决这个问题.不同之处在于您希望命令运行的Laravel应用程序循环中的哪一点.

Laravel循环中有许多涉及视图的要点.

您可以使用View::make().这是在实例化视图时 - 并且在返回函数之前调用View::make()any命令期间View::creators().

通常你只是运行return View::make()- 这意味着视图是'创建',然后返回到Laravel核心,然后它被'组合'到屏幕.这是在View::composer()调用时(即视图返回后).

我不确定你为什么要使用其中一个,但这解释了两者之间的区别.

  • 如果您对添加创作者的原因感到好奇(原来只有作曲家),请参阅[laravel/framework Issue#1822](https://github.com/laravel/framework/issues/1822) (2认同)