首页 > 解决方案 > 如何在 Laravel 中渲染之前更改视图分配的数据?

问题描述

Laravel 相关问题

对于以下 SomeController 类,我将返回带有“数据”的视图。我想搜索分配的“数据”是否具有“id”列并在渲染视图之前对其进行加密。所以当我从视图文件中访问“数据”时,“id”被加密了。

class SomeController 
{
    public function index(): View
    {
        $data = array(
            'id' => 1,
            'name' => 'siam'
        );
        return view('Views/View/Index', compact('data'));
    }
}

也许可以扩展 View 类并在扩展类方法中进行加密。但我希望在不扩展 View 类的情况下完成它。

一个。使用中间件

我可以使用在渲染视图之前触发的中间件处理程序吗?

湾。任何其他方式

或者我可以在渲染视图之前修改视图分配数据的任何其他方式。

提前谢谢大家。

标签: phplaravellaravel-middleware

解决方案


当渲染 aView时,Laravel 会派发一个composing:<view-name>事件。您可以通过创建一个泛型来挂钩此事件,ViewComposer如下所示:

View::composer('*', function ($view) {
    if ($view->id && is_int($view->id)) {
        $view->id = encrypt($view->id);
    }
});

有关详细信息,请参阅ViewComposers 上的文档。


推荐阅读