$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');

    // ...
});

另见