有没有办法在Symfony内核event_listener中修改请求主体 [英] Is there a way to modify request body in a Symfony kernel event_listener
问题描述
我的应用程序在请求正文中接收到XML,但是在执行控制器操作之前需要对XML结构进行一些更改.
My app receives an XML in a request body, but some changes in XML structure are needed before the controller action.
我已经做了一个内核事件监听器
I've made a kernel event listener
class TransformRequestPListener {
public function onKernelController(FilterControllerEvent $event)
{
[...]
}
}
在service.yml中声明
declared in service.yml
class: .\Listener\TransformListener
arguments: [...]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
我的问题是:
- 我可以修改请求正文(接收的XML)吗?
- 如何?
预先感谢
更新 覆盖Bundle类是我正在探索的新方法.也许我可以对编译器通行证做些什么,如在此声明但我从未做过类似的事情.有人可以帮我吗?
UPDATE Override the Bundle class is a new way I'm exploring. Maybe I can do something with Compiler Passes as stated here but I've never done something similar. Can someone help me?
推荐答案
最后,我设法修改了内容...或类似的内容.
Finally I managed to modify the content... or something similar.
使用内核事件监听器,我恢复了请求,进行了必要的转换并 我重新初始化了请求.我必须检查它是否不会干扰其他任何东西.这是代码:
Using a Kernel Event Listener I recovered the request, make needed transformations and I reinitialized the request. I must check it doesn't interfere with anything else. Here's the code:
$transformedContent = custom_transform($request->getContent());
$request->initialize(
$request->query->all(),
$request->request->all(),
$request->attributes->all(),
$request->cookies->all(),
$request->files->all(),
$request->server->all(),
$transformedContent
);
这篇关于有没有办法在Symfony内核event_listener中修改请求主体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!