laravel可终止的中间件,从控制器传递参数

时间:2017-10-13 09:28:16

标签: laravel middleware

我想使用可终止的中间件来进行请求记录:

<?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 从控制器传递到中间件?

编辑: 不幸的是,在控制器中生成了附加信息。因此,我无法在路由中间件函数中对其进行硬编码

3 个答案:

答案 0 :(得分:1)

您是否尝试添加 kernel.php

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);
    }

在控制器中:

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

答案 1 :(得分:1)

我认为您可以在处理请求时在控制器中为请求对象设置一些属性,请求对象本身将作为第一个参数传递给终止($ request,$ response)。然后,您可以提取您在控制器中设置的任何内容并使用它。

答案 2 :(得分:0)

编辑:你或许能够做到这一点

<强>控制器

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

<强>中间件

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