当前位置: 首页 > 后端技术 > PHP

Laravel给公共模板传值(viewcomposer)

时间:2023-03-30 04:46:32 PHP

我们的视图有很多共同的部分,比如导航菜单,底部信息,用户信息等,通常我们会用单独的视图组件来处理这些元素块,但是如何呢从后端传递这些组件需要的数据变量是一个问题,因为这些组件是在多个页面中共享的。从后端的角度来看,会涉及到多个路由/控制器的方法。每次都要重复采集和处理吗?传递这个数据?有没有一种方法可以支持一种定义和多种重用?1、使用laravel的view()->share方法,通过view对象提供的share方法,我们可以在AppServiceProvider等服务提供者的boot方法中定义共享视图变量:publicfunctionboot(){Schema::defaultStringLength(191);$weekItems=['天','一','二','三','四','五','六'];$today=sprintf('week%s',$weekItems[date("w",time())]);view()->share('today',$today);}如果不指定视图组件,上面代码的意思是在所有视图中共享today变量,这样当然有点浪费,而且它不推荐。我们通常通过ViewComposer以闭包的方式指定视图作用域,以预置共享“变量”。2.使用laravel的view()->composer方法view()->composer(['layouts.app'],function($view){$view->with('publicMsg','指定视图组件公共信息');});