9

关于将默认变量传递给视图的问题,传递所有视图中可用的变量,使用之间是否存在技术或功能差异View::composer()

View::composer('*', function($view) {
    $thundercats = 'Woooooohh!!';
    $view->with('thundercats', $thundercats);
})

filters.php文件或BaseController.phpView::share()文件中使用:

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

我最近才知道View::share()尽管我已经开始在另一个项目中使用前者,但我

编辑:

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

4

2 回答 2

21

从技术上讲,它们根本不一样。View::share只是设置一个变量,whileView::composer是一个回调函数。

让我更详细地解释一下:

View::share真的很简单,它设置了一个可以在任何视图中使用的变量,把它想象成一个全局变量。

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

View::composer/View::creator都可以用作一个有据可查的类。

虽然这些使您能够将其他数据传递给视图,但它们也使您能够做很多其他事情,例如它们可以:

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

这些只是使用and可能实现的一些示例。View::composerView::creator

于 2013-08-19T15:32:43.890 回答
2
View::composer('*', callback());

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

View::share

意味着一个变量将与所有输出的视图共享。

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

第二个是在控制器构造器中,因此它将应用于由该控制器触发的所有视图。

最后一件事:在重写构造函数时,总是使用以下代码调用父构造函数是一个很好的做法:

parent::_construct();
于 2013-08-19T15:18:45.050 回答