是否可以在Laravel 9中更改请求的正文内容和路径?



我目前正试图编写一个中间件从请求的路径和内容中过滤某些表达式。我知道可以分别使用$request->path()$request->getContent()读取URI和原始正文内容,但无法找到更改它的方法。

我心目中的代码应该是这样的:

<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
class MyMiddleware
{
public function handle(Request $request, Closure $next)
$uri = $request->path();
$body_content = $request->getContent();
$request->setContent(str_replace("foo","bar",$body_content));
$request->setPath(str_replace("foo","bar",$uri));
//functions setContent() and setPath() don't exist
return $next($request);
}

Laravel是否有我找不到的功能,或者如果没有,我该怎么做?

是的,您可以在中间件中修改传入请求。实际上,您的中间件可以扩展IlluminateFoundationHttpMiddlewareTransformsRequest类,它已经有一堆有用的方法来帮助您这样做。您所要做的就是重写transform方法。你可以在ConvertEmptyStringsToNull中间件中看到它是如何完成的。

我现在通过创建一个带有修改过的内容的新请求来解决这个问题,如下所示:

public function handle(Request $request, Closure $next)
{
$uri = $request->path();
$body_content = $request->getContent();
//process $uri and $body_content here
$final_request = Request::create($uri, $request->method(), $request->query->all(), $request->cookies->all(), $request->allFiles(), $request->server->all(), $body_content);
return $next($final_request)
}

相关内容

最新更新