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

时间:2018-11-16 01:52:04

标签: php laravel laravel-middleware

与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类的情况下完成它。

  • 想法

a。使用中间件

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

b。任何其他方式

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

谢谢大家。

1 个答案:

答案 0 :(得分:1)

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

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

有关更多信息,请参见ViewComposers上的documentation