2

使用 Symfony2 一段时间后,我在当前开发中遇到了一个问题:我需要在表单发送的数据得到验证之前对其进行编辑。情况如下:

  • 我的表单包含两个重要字段:“名称”和“域”。
  • “域”是指具有属性“域名称”的实体。

现在,假设“name”设置为“mywebsite”(使用表单),并且域设置为“mydomain.com”(在数据库中选择域的实体字段):

  • 表格[名称]:“我的网站”
  • form[domain] : 对象 (domain_name => "mydomain.com")

我想要实现的是根据所选域更改“名称”字段的值。我想将“domain_name”附加到“name”,以获得:

  • 表单[名称]:“mywebsite.mydomain.com”
  • form[domain] : 对象 (domain_name => "mydomain.com")

我找到了 2 个解决方案,但它们似乎不适合这种情况:

  • 数据转换器。似乎只在一个字段上工作,但是,为了编辑“名称”,我需要从表单访问“域”实体,这在 Data Transformer 类中不可用。我可能正在寻找一种在整个表单上应用数据转换器的方法(但我没有找到这样做的方法......)
  • 形成事件。这将在提交之前编辑“名称”字段,但我希望我的修改在之后发生(这样,用户无法更改它们)。

有没有我错过的解决方案?

4

1 回答 1

1

form.PRE_BIND您可以在事件中修改提交的数据。此事件发生然后您调用$form->bind($request)控制器。如何将事件订阅者添加到表单。请记住,您必须处理未转换为实体等的裸数据。

将数据转换器应用于整个表单非常容易 - 只是不要指定字段。例如

$builder
    ->add('name', 'text')
    ->add('domain', 'entity')
    ->addModelTransformer($transformer);

对比

// add a normal text field, but add your transformer to it
$builder->add(
    $builder->create('name', 'text')
        ->addModelTransformer($transformer)
);
于 2013-08-11T16:13:46.293 回答