猿问

$this->request->getData() 升级到 CakePHP 4.0 后为空

升级到 CakepPHP 4.0 后,我通过 XMLHttpRequest 发出的 POST 请求停止将数据传递给$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 组件,但没有任何改变。


HUH函数
浏览 115回答 1
1回答

斯蒂芬大帝

如果想知道发生了什么变化,请先查看迁移指南,在这种情况下,特别是组件的重大更改部分。请求正文解析功能已从请求处理程序组件中删除(之前存在的弃用警告也已删除,因为它导致了太多误报)。这现在应该由body parser middleware处理,您需要相应地添加您的应用程序,或者在您的Application类中全局添加:public function middleware(MiddlewareQueue $middlwareQueue): MiddlewareQueue{&nbsp; &nbsp; // ...&nbsp; &nbsp; $middlwareQueue->add(new \Cake\Http\Middleware\BodyParserMiddleware());&nbsp;&nbsp;&nbsp; &nbsp; return $middlwareQueue;}或在路由范围内:\Cake\Routing\Router::scope('/', function (\Cake\Routing\RouteBuilder $routes) {&nbsp; &nbsp; $routes->registerMiddleware('bodyParser', new \Cake\Http\Middleware\BodyParserMiddleware());&nbsp; &nbsp; $routes->applyMiddleware('bodyParser');&nbsp; &nbsp; // ...});
随时随地看视频慕课网APP
我要回答