我是 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/