Laravel向公共模板赋值方法总结
开发过程中许多时候都会向公共模板赋值,比如顶部导航栏,页面底部等等,不可能在每个控制器中都赋值一遍。
Laravel中解决办法如下:修改
App\Providers\AppServiceProvider
在boot方法中添加
View()->composer('common.header',function($view){//common.header对应Blade模板$view->with('key','value');});
也可以向所有模板中赋值
View()->share('key','value');
viewcomposers与视图有关,用在一个serviceprovider的boot()函数里,就是让一个view加载的时候,由于viewcomposer的作用,去调用某个函数传个参啊啥的。
1,创建serviceprovider
phpartisanmake:providerComposerServiceProvider
再把ComposerServiceProvider加到config/app.php里面
2,写viewcomposer
publicfunctionboot(){view()->composer('app',//模板名'App\Http\ViewComposers\MovieComposer'//方法名或者类中的方法);}
意思是一旦加载app.blade.php,就执行App\Http\ViewComposers\MovieComposer里的composer函数(这里之所以执行composer函数是默认的),如果你想换一个就
view()->composer('app','App\Http\ViewComposers\MovieComposer@foobar');//自己定义的方法
这里就执行foobar函数了
在App\Http\ViewComposers\MovieComposer.php里这么写
movieList=['Shawshankredemption','ForrestGump',];}publicfunctioncompose(View$view){$view->with('latestMovie');}}
3,其他当所有模板都要,用*正则表达式
view()->composer('*',function(View$view){//logicgoeshere});
想要指定多个view使用,用数组包起来
view()->composer(['nav','footer'],'App\Http\ViewComposers\MovieComposer');或者view()->composer(['admin.admin'],function($view){$column=$this->object_array(DB::table('column')->get());foreach($columnas$k=>$v){$chid=explode(',',$v['childid']);foreach($chidas$value){$column[$k]['chname'][]=$this->object_array(DB::table('column_child')->where('id',$value)->first());}}$view->with('columns',$column);});