我将所有日志交互保存在我的 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;
}
使用可终止中间件
有时中间件可能需要在 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();
}
}