欢迎各位兄弟 发布技术文章
这里的技术是共享的
View::share()或view()->share() // 在控制器中 就可以直接使用
下面的两种方法都行
方法一,
view()->share('wx_u_groups',$wx_u_groups);
方法二,
view()->share(compact('pop_window'));//等价于下面一行
view()->share(array('pop_window'=>$pop_window));
view()->share(array('curr_city'=>$this->city));
方法一:使用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', //user 是 user.blade.php 模板 'App\Http\ViewComposers\ProductComposer' => 'product' ]); |