php – 如何在Laravel中重用控制器代码

我是Laravel的新手(一般来说是相对较新的MVC概念)并且已经观看了几个小时的教程并阅读了许多其他内容,但有一个简单的常见任务让我望而却步:重用相同基本元素的最佳方法是什么在跨控制器的系统(比如CMS)中?

场景:

我有一个内容管理系统,并希望为每种类型的功能使用不同的控制器:例如用于操纵帖子的帖子控制器,用于管理用户用户控制器,用于菜单项目的菜单控制器等.大多数教程推荐这种类型的工作流程.

但是,在实际的CMS前端中,我有许多动态的常见元素(来自数据库)但仍需要在所有控制器上显示.例如,菜单(来自数据库),当前用户的详细信息(用户名和根据权限的相关按钮)等.使用Blade向用户(前端)显示它很容易,但我可以’找出在后端执行此操作的最佳方法.

例如,如果每个控制器分别从DB获取菜单,那就是(缺乏)代码重用噩梦.另一方面,似乎没有中心位置可以插入此代码并将其传递到跨所有控制器的视图.我确信Laravel开发人员已经想到了这种非常常见的情况.实施它的最佳方法是什么?

解决方法:

这正是070​​00的用途!

View Composers允许您注册在呈现特定视图之前执行的回调.通常在Service Provider注册它们.您可以使用现有的AppServiceProvider或为其创建新的ComposerServiceProvider.

对于具有名称菜单的视图,这将是一个非常基本的示例

public function boot(){
    View::composer('menu', function($view){
        $menu = DB::table('menu')->get();
        $view->with('menu', $menu);
    });
}

您还可以指定包含编写器逻辑的类. Read more about that in the docs

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...