Webman 1.5 能在中间件中能修改 Request 吗?
在文档中介绍了修改 Response 的例子,如果我想修改请求过来的 post 的数据,该怎么操作?
<?php
namespace app\middleware;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
class AccessControlTest implements MiddlewareInterface
{
public function process(Request $request, callable $handler) : Response
{
// 如果是options请求则返回一个空响应,否则继续向洋葱芯穿越,并得到一个响应
$response = $request->method() == 'OPTIONS' ? response('') : $handler($request);
// 给响应添加跨域相关的http头
$response->withHeaders([
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Allow-Origin' => $request->header('origin', '*'),
'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'),
]);
return $response;
}
}
任何PHP框架都遵循的基本规则,比如继承、对象的引用传递。
您可以 在自定义请求类里面实现你的功能
support/Request.php
直接在控制器的初始化函数里改更不是更简单吗
可以的,看这里。
https://www.workerman.net/doc/webman-v1/request.html#%E9%87%8D%E5%86%99%E5%8F%82%E6%95%B0
这是1.6新增的吧,他问1.5
是的,1.5 没有 setPost
反射,大概就这样,可能有 bug,但原理就是这个原理。
效果如下:
或者像楼上说的直接改
support/Request
,简单得多,如下,不过不确定改support
目录是不是一件好事,起码某些属性是不能修改的,要注意点。谢谢回复
/**
*/
function setParams(string $method, array $data)
{
$method = strtolower($method);
if (!isset($this->data[$method])) {
if ($method == 'post'){
$this->parsePost();
}
if ($method == 'get'){
$this->parseGet();
}
}
$rawData = $this->data ?: [];// 获取原数据
$newData = $rawData; // 复制原始数据
$newData[$method] = array_merge($newData[$method] ?? [], $data); // 合并特定方法的数据
$this->data = $newData; // 更新对象数据
}
2025.2安装完好大
我试试,谢谢
中间件就是用来读写
Resquest
对象的, 把你需要存储的变量使用setAttribute
方法写入就行