视图的数据拦截器— Laravel 5.5

视图的数据拦截器— Laravel 5.5

原文:https://medium.com/hackernoon/data-interceptor-for-your-views-laravel-5-5-c973a96bb45a

几天前,我在 Laravel Internals 上看到一条来自 Colin Viebrock 的消息,询问如何拦截从控制器传到视图的数据。我是这样做的。

1-扩展视图服务提供者

使用 artisan 我们可以php artisan make:provider ViewServiceProvider让我们开始。在新的服务提供者中,我们将扩展默认的服务提供者,并简单地覆盖方法createFactory

**<?php

namespace** App\Providers;

**use** App\Support\View\MyViewFactory;
**use** Illuminate\View\ViewServiceProvider **as** BaseViewServiceProvider;

**class** ViewServiceProvider **extends** BaseViewServiceProvider
{
    **protected function** createFactory($resolver, $finder, $events)
    {
        **return new** MyViewFactory($resolver, $finder, $events);
    }
}

2-不要忘记交换服务提供商设置

application/config/app . PHP中有一个将启动的提供者列表。让我们删除默认的Illuminate,用我们在第一步中创建的来替换它。应该是\App\Providers\ViewServiceProvider

3-创建自定义视图工厂

我决定在应用程序/应用程序/支持/视图中创建我的,如下所示:

**<?php

namespace** App\Support\View;

**use** Illuminate\View\Factory;

**class** MyViewFactory **extends** Factory
{
    **protected function** viewInstance($view, $path, $data)
    {
        **return new** MyView($this, $this->getEngineFromPath($path), $view, $path, $data);
    }
}

4-在您的自定义视图中实现数据拦截

在向视图提供数据之前,将调用gatherData方法。这是截取所有数据的最佳位置。

**<?php

namespace** App\Support\View;

**use** Illuminate\View\View;

**class** MyView **extends** View
{
    **protected function** gatherData()
    {
        $data = **parent**::*gatherData*();

        **return** array_merge($data, ['intercepted' => **true**]);
    }
}

5-看结果!

现在只需打开welcome.blade.php文件,并添加一个允许您测试拦截的代码片段:

**@if(**$intercepted**)** <h1>INTERCEPTED!</h1>
**@endif**

一旦你打开页面,你就能看到它。


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除