我们都知道模板一般会用到继承,导航栏就是一个很好的例子,但是导航栏的数据如何共享

Laravel 5 多个视图同享数据的办法  数据 第1张

咱们都知道模板一般会用到承继,导航栏便是一个很好的比方,可是导航栏的数据怎样同享,比方有个导航的文件叫在view/navigation.blade.php 为了简略一点,文件里只要设置了一个变量
1 {{$cqh}}
现在的要求是每个页面都会用到这个变量,怎样同享这个数据呢? 一般这样的操作我会在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' ]);

转载请说明出处
知优网 » Laravel 5 多个视图同享数据的办法

发表评论

您需要后才能发表评论