咱们都知道模板一般会用到承继,导航栏便是一个很好的比方,可是导航栏的
数据怎样同享,比方有个导航的文件叫在view/navigation.blade.php
为了简略一点,文件里只要设置了一个变量
现在的要求是每个页面都会用到这个变量,怎样同享这个数据呢?
一般这样的操作我会在Laravel服务的boot办法里设置,下面介绍两种同享数据的办法
办法一:运用View:share办法,如CqhServiceProvider里
1
2
3
4
|
publicfunctionboot()
{
View::share('cqh','chenqionghe');
}
|
这是运用外观方式,也能够直接运用view()办法,
1
|
view()->share('cqh','chenqionghe');
|
办法二:运用composer办法独自对这个navigation.blade.php进行传送数据,办法如下
1
2
3
4
5
6
|
publicfunctionboot()
{
view()->composer('navigation',function($view) {
$view->with('cqh','chenqionghe');
});
}
|
以上是运用闭包的方式来完结这个操作,其实这和路由相同,也能够用类来替代,Laravel里叫组件,办法如下
1
2
3
4
|
publicfunctionboot()
{
View::composer('navigation','App\Http\ViewComposers\MyViewComposer');
}
|
上面这样便是注册了视图组件,而且在每次 navigation视图烘托的时分,MyViewComposer@compose 都将会被履行。
下面咱们来看这个组件怎样界说
1
2
3
4
5
6
7
8
9
|
<?phpnamespaceApp\Http\ViewComposers;
useIlluminate\Contracts\View\View;
classMyViewComposer
{
publicfunctioncompose(View$view)
{
$view->with('cqh','chenqionghe');
}
}
|
在视图被烘托之前,视图组件的 compose 办法就会被调用,而且传入一个 Illuminate\Contracts\View\View 实例。你能够运用 with 办法来把数据绑定到 view。
留意:办法一和办法二其实是有差异的,办法一是对一切的视图都传递的cqh数据,而办法二仅仅对navigation视图传递了cqh数据
假如办法二要到达办法一的作用,能够这样
1
2
3
4
|
View::composer('*',function($view)
{
//
});
|
这样就会对一切视图进行传递了
也能够针对多个视图指定MyViewComposer组件
1
|
View::composer(['navigation','footer'],'App\Http\ViewComposers\MyViewComposer');
|
也能够运用 composers 办法来一起界说一群视图组件
1
2
3
4
5
|
View::composers([
'App\Http\ViewComposers\AdminComposer'=> ['admin.index','admin.profile'],
'App\Http\ViewComposers\UserComposer'=>'user',
'App\Http\ViewComposers\ProductComposer'=>'product'
]);
|