关于问题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 )。考虑到这一点,我猜一个班级好多了?虽然,我现在还不太清楚为什么。 :)
答案 0 :(得分:15)
从技术上讲,它们完全没有相似之处。 View::share
只是设置一个变量,而View::composer
是一个回调函数。
让我更详细地解释一下:
View::share
非常简单,它设置了一个可以在任何视图中使用的变量,将其视为全局变量。
View::composer
注册一个在呈现视图时调用的事件,不要将它与在实例化视图时触发的View::creator
混淆。
View::composer
/ View::creator
都可以用作well documented的类。
虽然这些使您能够将其他数据传递给视图,但它们还使您能够执行许多其他操作,例如:
这些只是使用View::composer
和View::creator
可以可以的一些示例。
答案 1 :(得分:1)
View::composer('*', callback());
表示将为所有视图(*)调用回调。
View::share
表示变量将与所有输出的视图共享。
因为第一个是在filters.php中,所以它将适用于所有路线。
第二个是控制器构造函数,因此它将适用于此控制器触发的所有视图。
最后一件事:当重写构造函数时,总是用这段代码调用父构造函数是一个很好的实践:
parent::_construct();