Отправить переменную для завершения в промежуточном программном обеспечении - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь отправить переменную для завершения промежуточного программного обеспечения из маршрута:

Route::group(['middleware' => 'checkUserLevel'], function () {
    // my routes
});

Я могу получить checkUserLevel в дескрипторе промежуточного программного обеспечения, но мне также нужен доступ в методе завершения, что мне делать?

public function handle($request, Closure $next, $key)
{
     dd($key); // it returns variable
}

public function terminate($request, $response)
{
      //I need that variable here
}

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Как упомянуто в документации , если вы хотите использовать один и тот же экземпляр промежуточного программного обеспечения (поскольку по умолчанию он использует свежий экземпляр промежуточного программного обеспечения), вам необходимо зарегистрировать промежуточное программное обеспечение как синглтон.

Вы можете зарегистрировать его как синглтон, добавив к вашему ServiceProvider register методу

public function register()
{
    $this->app->singleton(\App\Http\Middleware\YourMiddleware::class);
}

Затем вы можете использовать свойство class ', как в первом примере ответа Лорента

protected $foo;

public function handle($request, Closure $next)
{
    $this->foo = 'bar';

    return $next($request);
}

public function terminate($request, $response)
{
    // because we cannot use `dd` here, so the example is using `logger`
    logger($this->foo);
}
0 голосов
/ 02 января 2019

Вы можете сделать:

protected $key;

public function handle($request, Closure $next, $key)
{
     $this->key = $key;
}

public function terminate($request, $response)
{
     $this->key; //access property key
}

, хотя это должно быть передано через глобальный запрос.Как:

public function handle($request, Closure $next)
{
     $request->input('key');
}

public function terminate($request, $response)
{
      $request->input('key');
}

Отредактировано:

Route::group(['middleware' => 'checkUserLevel'], function () {
    Route::get('/test/{testparam}', function () {
    });
});

public function handle($request, Closure $next)
{
     $request->route('testparam');
}

public function terminate($request, $response)
{
      $request->route('testparam');
}
...