(编辑:jimmy 日期: 2024/10/4 浏览:2)
本文实例讲述了Laravel框架实现多个视图共享相同数据的方法。分享给大家供大家参考,具体如下:
最近在用Laravel写一个cms,还没有完成,但是也遇到了许多难点,比如cms后台每个视图都要展示相同的导航菜单数据。
环境:
PHP 7.1
Apache 2.4
MySQL 5.7
Laravel 5.4
假设使用传统的方法,应该是在每个控制器中都调用数据,然后把数据都塞给视图。
$menu = DB::table('menu')->get(); return view('xx',['menu'=>$menu]);
新建一个BaseController,然后让BaseController去获取数据,然后在每个控制器都继承BaseController,最后将数据塞到视图中。
基类
class BaseController{ protected $menu = null;//菜单数据 public function __construct(){ $this->getMenu();//获取导航菜单 } public function getMenu(){ $this->menu = DB::table('menu')->get(); } }
A控制器
class AController extends BaseController{ public function index(){ return view('admin.index',['menu'=>$this->menu,'user'=>$user]); } }
缺点:在每个控制器中都需要重新设置相同的模板的数据(menu)
使用Laravel中的View Composers来解决这个问题
1、在App\Providers下创建一个ComposerServiceProvider类
<"color: #0000ff">admin.common.*,如果admin.common.* 下的视图被渲染的话将会调用App\Http\ViewComposers\AdminComposer@composer 方法2、注册ComposerServiceProvider
在config/app.php文件下的providers数组中进行注册
App\Providers\ComposerServiceProvider::class,3、创建AdminComposer类
Laravel推荐把view composer类放在app\Http\ViewComposers目录下,这个目录一开始是没有的,需要新建
<"htmlcode">