为什么 laravel 中间件返回 null 作为响应?

问题描述 投票:0回答:1

我将所有日志交互保存在我的 laravel 中间件中。我正在获取所有请求信息,但响应返回 null。下面是中间件中的代码:

public function handle($request, Closure $next){   
    $response= $next($request);

    $logroute = new model_logroute();
    $logroute->uri=$request->getUri(); // working
    $logroute->request_body=json_encode($request->all()); //working
    $logroute->response=json_encode($response->getContent()); // returning null
    $logroute->save();

    return $response;
}
laravel middleware laravel-middleware
1个回答
0
投票

使用可终止中间件

有时中间件可能需要在 HTTP 之后做一些工作 响应已发送到浏览器。如果你定义一个终止 你的中间件上的方法和你的网络服务器正在使用 FastCGI, terminate 方法将在响应完成后自动调用 发送到浏览器:

terminate 方法应该同时接收请求和响应。 一旦你定义了一个可终止的中间件,你应该将它添加到 app/Http/Kernel.php 中的路由或全局中间件列表 文件。

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class TerminatingMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        return $next($request);
    }

    /**
     * Handle tasks after the response has been sent to the browser.
     */
    public function terminate(Request $request, Response $response): void
    {
        $logroute = new model_logroute();
        $logroute->uri=$request->getUri(); // working
        $logroute->request_body=json_encode($request->all()); //working
        $logroute->response=json_encode($response->getContent()); // returning null
        $logroute->save();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.