Laravel:View :: share()和View :: composer()之间的区别

时间:2013-08-19 14:05:39

标签: php view laravel

关于问题Passing default variables to view,要传递所有视图中可用的变量,使用View::composer()之间是否存在技术或功能差异:

View::composer('*', function($view) {
    $thundercats = 'Woooooohh!!';
    $view->with('thundercats', $thundercats);
})
filters.php 文件中的

BaseController.php 文件中View::share()的使用:

public function __construct {
    $thundercats = 'Woooooohh!!';
    View::share('thundercats', $thundercats);
}

我最近才了解View::share()并发现它非常有侵略性,尽管我已经开始在另一个项目中使用前者了。

修改

我的第一个假设是前者是一个文件( filters.php ),而后者是一个类( BaseController.php )。考虑到这一点,我猜一个班级好多了?虽然,我现在还不太清楚为什么。 :)

2 个答案:

答案 0 :(得分:15)

从技术上讲,它们完全没有相似之处。 View::share只是设置一个变量,而View::composer是一个回调函数。

让我更详细地解释一下:

View::share非常简单,它设置了一个可以在任何视图中使用的变量,将其视为全局变量。

View::composer注册一个在呈现视图时调用的事件,不要将它与在实例化视图时触发的View::creator混淆。

View::composer / View::creator都可以用作well documented的类。

虽然这些使您能够将其他数据传递给视图,但它们还使您能够执行许多其他操作,例如:

  • 帮助调试视图
  • 记录有关视图的信息
  • 用于创建自定义缓存(可能不是一个好主意,但可能)

这些只是使用View::composerView::creator可以可以的一些示例。

答案 1 :(得分:1)

View::composer('*', callback());

表示将为所有视图(*)调用回调。

View::share

表示变量将与所有输出的视图共享。

因为第一个是在filters.php中,所以它将适用于所有路线。

第二个是控制器构造函数,因此它将适用于此控制器触发的所有视图。

最后一件事:当重写构造函数时,总是用这段代码调用父构造函数是一个很好的实践:

parent::_construct();