我们的视图有很多公共部分,比如导航菜单、底部信息、用户信息等,通常我们会以单独的视图组件来处理这些元素区块,但是如何从后端传递这些组件需要的数据变量是个问题,因为这些组件在多个页面中共用,从后端角度来看,会涉及到多个路由/控制器方法,难道我们要每次都重复获取并传递这些数据吗?有没有一种方式可以支持一处定义,多处复用?
1.使用laravel的view()->share方法
通过视图对象提供的 share 方法,我们可以在某个服务提供者如 AppServiceProvider 的 boot 方法中定义共享的视图变量:
public function boot()
{
Schema::defaultStringLength(191);
$weekItems = ['日', '一', '二', '三', '四', '五', '六'];
$today = sprintf('星期%s', $weekItems[date("w", time())]);
view()->share('today', $today);
}
如果不指定视图组件的话,上述代码的含义是在所有视图中共享today
变量,这当然是有点浪费了,不推荐这么做,我们通常会以闭包方式通过 View Composer 指定视图作用域来预设共享「变量」。
2.使用laravel的view()->composer方法
view()->composer(['layouts.app'], function ($view) {
$view->with('publicMsg', '指定视图组件共用信息');
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。