laravel模板 视图中设置全局变量
laravel模板 视图中设置全局变量
有一些数据需要在所有模板中都能调用到,比如网站配置信息,联系方式等等信息需要全站调用,又不能在每个控制器都重复写代码来实现。
这种需求可以利用视图组件来实现,就是预设视图组件数据变量
就是在Provider的boot方法中定义全局变量。
#在所有的视图模板中共享posts变量,相当于就是全局变量了 view()->share('posts', Post::recent());
#指定模板中共享变量 view()->composer('post.sidebar', function ($view) { $view->with('posts', Post::recent()); }); #指定模板目录共享变量 view()->composer('post.*', function ($view) { $view->with('posts', Post::recent()); }); #指定多个视图中共享变量 view()->composer(['post.header', 'post.footer'], function ($view) { $view->with('posts', Post::recent()); });
还可以自定义业来实现:
<?php namespace App\Http\ViewComposers; use Illuminate\Contracts\View\View; class PostViewComposer { public function compose(View $view) { $view->with('posts', Post::recent()); } } #使用 View::composer(['post.header', 'post.footer'], 'App\Http\ViewComposers\PostViewComposer');
在源码中其实还有一个方法,在文档中我没有找到它的说明,以数组的方式定义多个组件
View::composers([ 'App\Http\ViewComposers\PostComposer' => ['post.head', 'post.foot'], 'App\Http\ViewComposers\UserComposer' => 'user' ]);
Illuminate\View\Concerns\ManagesEvents 在这个trait中还有其他功能包括添加视图事件,感兴趣可以自己去看看。
留言(0)