如何在 Laravel 中渲染之前更改视图分配的数据?

How to change view-assigned data before render in Laravel?

Laravel相关问题

对于下面的 SomeController class,我返回视图 "data"。我想搜索分配的 "data" 是否有 "id" 列并在呈现视图之前对其进行加密。所以当我从视图文件访问"data"时,"id"被加密了。

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

也许可以扩展视图 class 并在扩展的 class 方法中加密。但我希望在不扩展 View class.

的情况下完成它

一个。使用中间件

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

b。任何其他方式

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

先谢谢大家了

渲染 View 时,Laravel 将调度 composing:<view-name> 事件。您可以通过创建一个通用的 ViewComposer 来挂接此事件,如下所示:

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

有关详细信息,请参阅 ViewComposers 上的 documentation