修改控制器内的请求

时间:2012-08-21 11:53:19

标签: symfony symfony-forms

在Symfony中,很容易在控制器中获取请求:

$request = $this->container->get('request');

现在,我认为这是一种不好的做法......但是可以修改该请求,这意味着,例如在绑定之前修改隐藏表单字段的值:

$requestModifiedWithNewValueForHiddenFormField = $request;
// modify the request
// ....
$this->bind($requestModifiedWithNewValueForHiddenFormField);

我想我应该使用dataTransformer,但在这种情况下,我想就修改请求发表意见......

2 个答案:

答案 0 :(得分:7)

对于快速请求字段修改,您可以这样做,

$request = $this->getRequest()->request;
$requestArray = $request->all();
$requestArray['nested']['modifying_field'] = "Modified value";
$request->replace($requestArray);

如果该字段未嵌套,则可以按照以下方式执行,

$this->getRequest()->request->set("modifying_field", "Modified value");

答案 1 :(得分:1)

这取决于你想要达到的目标。

当这个逻辑(修改隐藏文件)对于多个控制器来说是常见的时候你应该使用一些干法,比如dataTransformer或事件订阅者:

http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html

您还可以向表单注入请求并创建表单方法来处理此问题。