php - 如何在 Laravel 中跨 Controller 重用代码

标签 php laravel model-view-controller laravel-5

我是 Laravel 的新手(总体上对 MVC 概念来说相对较新)并且已经看了几个小时的教程并阅读了许多其他的教程,但是我没有完成一个简单的常见任务:重用跨 Controller 的系统(例如 CMS)中的基本元素是否相同?

场景:

我有一个内容管理系统,想为每种类型的功能使用不同的 Controller :例如用于操作帖子的帖子 Controller 、用于管理用户的用户 Controller 、用于菜单项的菜单 Controller 等。大多数教程推荐这种类型的工作流。

然而,在实际的 CMS 前端中,我有许多动态的公共(public)元素(来自数据库)但仍需要在所有 Controller 中显示。例如,菜单(来自数据库),当前用户的详细信息(用户名和根据权限的相关按钮)等。使用 Blade 向用户(前端)显示它很容易,但我不能不要找出在后端执行此操作的最佳方法。

例如,如果每个 Controller 分别从数据库中获取菜单,那将是(缺乏)代码重用的噩梦。另一方面,似乎没有一个中心位置可以插入此代码并将其传递到所有 Controller 的 View 上。我敢肯定,Laravel 开发人员已经想到了这种极其常见的场景。实现它的最佳方式是什么?

最佳答案

这正是View Composers是为了!

View Composer 允许您注册一个在特定 View 呈现之前执行的回调。通常你在 Service Provider 中注册它们.您可以使用现有的 AppServiceProvider 或为此创建一个新的 ComposerServiceProvider

对于名为 menu 的 View ,这将是一个非常基本的示例

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

您还可以指定一个包含 Composer 逻辑的类。 Read more about that in the docs

关于php - 如何在 Laravel 中跨 Controller 重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730909/

相关文章:

javascript - 强制下载PHP生成的二维码图像

PHP - 从数据 URI 调整图像大小并压缩图像

model-view-controller - MVC 文件夹结构与替代方案是否有充分的理由?

laravel Policy 函数参数太少

php - 更改 Laravel Passport 使用的 SQL Server 架构

c++ - 关于 MVC View 界面的良好设计实践

java - MVC结构中图形的问题

javascript - 如何在 Vuejs 中使用 Laravel Blade 语法

PHP 相当于 Javascript "with"作用域语句

php - 如何在 Laravel 中获取大于 x 的记录数(使用 MySQL 查询)