laravel终止的中间件,通过从控制器

laravel终止的中间件,通过从控制器

问题描述:

我想用请求记录一个终止的中间件参数:laravel终止的中间件,通过从控制器

<?php 

namespace Illuminate\Session\Middleware; 

use Closure; 
use App\Helpers\Logger; 

class LogRequest 
{ 
    public function handle($request, Closure $next) 
    { 
     return $next($request); 
    } 

    public function terminate($request, $response) 
    { 
     Logger::log($request, $response, $additionalInfo) 
    } 
} 

如何传递的$ additionalInfo从控制器到中间件?

编辑: 不幸的是,额外的信息在控制器中生成。

protected $routeMiddleware = [ 
     ...... 
     'LogRequest'=> \App\Http\Middleware\LogRequest::class 
    ]; 

LogRequestMiddleware:

public function handle($request, Closure $next, $additionalInfo) 
     { 
      //here you have $additionalInfo 
      $request->attributes->add(["info" => $additionalInfo]); 
      return $next($request); 
     } 
    public function terminate($request, $response) 
    { 
     dd($request->attributes); 
    } 

并在控制器路由中间件功能

+0

编辑我的答案。 – LorenzoBerti

你有没有尝试添加到kernel.php因此,我不能硬编码:

public function __construct() 
    { 
     $additionalInfo = "test" 
     $this->middleware("LogRequest:$additionalInfo"); 
    } 
+0

不幸的是,这不起作用,因为我需要终止方法中的参数,而不是句柄方法。 – Chris

+0

我已经编辑了我的答案,以显示你可以做什么 – LorenzoBerti

编辑:您可能能够做到这一点

控制器

$request->attributes->add(['additionalInfo' => 'additionalInfoValue']); 

中间件

public function terminate($request, $response) 
{ 
    $additionalInfo = $request->attributes('additionalInfo' => $additionalInfo); 
    Logger::log($request, $response, $additionalInfo) 
} 
+0

他会从控制器传递中间件而不是从路由传递 – LorenzoBerti

+0

不幸的是,控制器中会生成额外的信息。因此,我不能在路由中间件功能中对其进行硬编码 – Chris