Laravel 5 多个视图共享数据的方法

Laravel 5 多个视图共享数据的方法

我们都知道模板一般会用到继承,导航栏就是一个很好的例子,但是导航栏的数据如何共享,比如有个导航的文件叫在view/navigation.blade.php
为了简单一点,文件里只有设置了一个变量
1
{{  $cqh  }}
现在的要求是每个页面都会用到这个变量,如何共享这个数据呢?
一般这样的操作我会在Laravel服务的boot方法里设置,下面介绍两种共享数据的方法
 

方法一:使用View:share方法,如CqhServiceProvider里

1
2
3
4
public  function  boot()
{
     View::share( 'cqh' , 'chenqionghe' );
}
这是使用外观模式,也可以直接使用view()方法,
1
view()->share( 'cqh' 'chenqionghe' );

 

方法二:使用composer方法单独对这个navigation.blade.php进行传送数据,方法如下
1
2
3
4
5
6
public  function  boot()
{
     view()->composer( 'navigation' function  ( $view ) {
         $view ->with( 'cqh' , 'chenqionghe' );
     });
}
以上是使用 闭包的形式来完成这个操作,其实这和路由一样,也可以用类来代替,Laravel里叫 组件,方法如下
1
2
3
4
public  function  boot()
{
     View::composer( 'navigation' 'App\Http\ViewComposers\MyViewComposer' );
}
上面这样就是注册了视图组件,并且在每次 navigation视图渲染的时候,MyViewComposer@compose 都将会被执行。
下面我们来看这个组件怎么定义
1
2
3
4
5
6
7
8
9
<?php  namespace  App\Http\ViewComposers;
use  Illuminate\Contracts\View\View;
class  MyViewComposer
{
     public  function  compose(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'
]);

 

猜你喜欢

转载自blog.csdn.net/hjh15827475896/article/details/78612943
今日推荐