有没有办法在Symfony内核event_listener中修改请求主体 [英] Is there a way to modify request body in a Symfony kernel event_listener

查看:51
本文介绍了有没有办法在Symfony内核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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆