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);
}
并在控制器路由中间件功能
你有没有尝试添加到kernel.php因此,我不能硬编码:
public function __construct()
{
$additionalInfo = "test"
$this->middleware("LogRequest:$additionalInfo");
}
不幸的是,这不起作用,因为我需要终止方法中的参数,而不是句柄方法。 – Chris
我已经编辑了我的答案,以显示你可以做什么 – LorenzoBerti
编辑:您可能能够做到这一点
控制器
$request->attributes->add(['additionalInfo' => 'additionalInfoValue']);
中间件
public function terminate($request, $response)
{
$additionalInfo = $request->attributes('additionalInfo' => $additionalInfo);
Logger::log($request, $response, $additionalInfo)
}
他会从控制器传递中间件而不是从路由传递 – LorenzoBerti
不幸的是,控制器中会生成额外的信息。因此,我不能在路由中间件功能中对其进行硬编码 – Chris
编辑我的答案。 – LorenzoBerti