Laravel 中 eloquent 的全局数据用于布局

Global data from eloquent in Laravel to be used for layout

我在布局中使用了一些变量,这些变量将从 eloquent 加载数据。为此,我使用通过构造函数注入控制器的存储库模式。但显然,我不想在我制作的每个控制器中重复这个逻辑。

解决这个问题的最佳方法是什么?

我已经尝试将存储库注入到 BaseController 构造函数中,但是 baseController 构造函数没有被自动调用。我需要先调用 parent::__construct() ,这需要传递存储库参数。我认为这不是正确的方法。

这是我的 BaseController。

    class BaseController extends Controller {

    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */
    protected $repo;

    public function __construct(Repository $repo) {

        $this->repo = $repo;
    }


    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }

        $data = $this->repo->someMethod();

        View::share('global_data',$data);
    }

 }

不会自动调用 BaseController 构造函数来解决依赖关系。

将存储库中的全局数据用于布局的最佳方法是什么?

要调用 BaseController,您可以将 parent::__construct() 放入该控制器的构造函数中。如果您有任何需要支持的遗留代码,这可能是最快的起床方式 运行.

展望未来,您可以设置 View Composers 来设置服务以侦听要在视图中请求的变量,然后根据需要延迟加载它。它的性能实现通常可以忽略不计,但仅在呈现视图时调用,因此如果需要它无法回调到框架中。

您也可以使用 route filter (in L4) for the like controllers that need that param or middleware(在 L5 中),但这仅适用于您需要完成的工作不仅仅是 variable/value 并且应该在控制器完成之前完成已加载。