$this->request->getData() 在升级到 CakePHP 4.0 后为空
$this->request->getData() empty after upgrade to CakePHP 4.0
升级到 CakepPHP 4.0 后,我的 POST 请求通过 XMLHttpRequest 停止向 $this->request->getData()
传递数据
虽然 $this->request->input('json_decode');
可以访问数据,但 GET 请求也能正常工作。
但我想知道与 3.* 相比发生了什么变化,以及为什么它不像以前那样工作了。
这是我的 xhr:
this.$http.post(
url,
data,
{headers: {'X-CSRF-TOKEN': '<?= $this->request->getAttribute('csrfToken') ?>'}},
})
.then(response => {
//
}
);
当我调用 $this->request->getData()
时它给了我一个空数组
我尝试为该特定操作关闭 FormProtection 组件,但没有任何改变。
如果想知道发生了什么变化,请先查看迁移指南,在本例中具体为 the breaking changes section for components。
请求正文解析功能已从请求处理程序组件中删除(之前存在的弃用警告也已删除,因为它会导致太多误报)。这现在应该由 the body parser middleware 处理,您需要在 Application
class':
中全局添加相应的应用程序
public function middleware(MiddlewareQueue $middlwareQueue): MiddlewareQueue
{
// ...
$middlwareQueue->add(new \Cake\Http\Middleware\BodyParserMiddleware());
return $middlwareQueue;
}
或在路由范围内:
\Cake\Routing\Router::scope('/', function (\Cake\Routing\RouteBuilder $routes) {
$routes->registerMiddleware('bodyParser', new \Cake\Http\Middleware\BodyParserMiddleware());
$routes->applyMiddleware('bodyParser');
// ...
});
另见
升级到 CakepPHP 4.0 后,我的 POST 请求通过 XMLHttpRequest 停止向 $this->request->getData()
虽然 $this->request->input('json_decode');
可以访问数据,但 GET 请求也能正常工作。
但我想知道与 3.* 相比发生了什么变化,以及为什么它不像以前那样工作了。
这是我的 xhr:
this.$http.post(
url,
data,
{headers: {'X-CSRF-TOKEN': '<?= $this->request->getAttribute('csrfToken') ?>'}},
})
.then(response => {
//
}
);
当我调用 $this->request->getData()
我尝试为该特定操作关闭 FormProtection 组件,但没有任何改变。
如果想知道发生了什么变化,请先查看迁移指南,在本例中具体为 the breaking changes section for components。
请求正文解析功能已从请求处理程序组件中删除(之前存在的弃用警告也已删除,因为它会导致太多误报)。这现在应该由 the body parser middleware 处理,您需要在 Application
class':
public function middleware(MiddlewareQueue $middlwareQueue): MiddlewareQueue
{
// ...
$middlwareQueue->add(new \Cake\Http\Middleware\BodyParserMiddleware());
return $middlwareQueue;
}
或在路由范围内:
\Cake\Routing\Router::scope('/', function (\Cake\Routing\RouteBuilder $routes) {
$routes->registerMiddleware('bodyParser', new \Cake\Http\Middleware\BodyParserMiddleware());
$routes->applyMiddleware('bodyParser');
// ...
});
另见