【发布时间】:2015-06-22 21:17:36
【问题描述】:
我需要使用 angularJS 向表单动态添加具有不同名称和 id 的其他表单字段。在检查表单是否有效时,如何让 symfony 忽略这些字段?我无法将这些字段添加到构建器中,因为我不知道该字段的名称是什么。
我可以使用包含 ID 的表单字段命名,例如 field1、field2、field3 等。但如果是这样,我可以以某种方式设置该领域的模式吗?类似field*
【问题讨论】:
我需要使用 angularJS 向表单动态添加具有不同名称和 id 的其他表单字段。在检查表单是否有效时,如何让 symfony 忽略这些字段?我无法将这些字段添加到构建器中,因为我不知道该字段的名称是什么。
我可以使用包含 ID 的表单字段命名,例如 field1、field2、field3 等。但如果是这样,我可以以某种方式设置该领域的模式吗?类似field*
【问题讨论】:
尽管我同意@sepikas_antanas 的观点,但如果您非常想走这条路,您可以使用提交的数据添加未知的表单字段:
class ExampleEntry extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$f = function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if (is_array($data)) {
foreach ($data as $name => $value) {
if (!$form->has($name)) {
// dunno you fields types
$form->add($name, 'hidden');
}
}
}
};
$builder->addEventListener(FormEvents::PRE_SET_DATA, $f);
$builder->addEventListener(FormEvents::PRE_SUBMIT, $f);
}
【讨论】:
根据 symfony2 文档http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html
您应该以这样一种方式组织您的应用程序:用户操作(添加表单字段的用户)将提交带有生成表单字段所需数据的表单:
Symfony2 表单生成只发生在服务器端,这是出于安全原因。
忽略表单验证不是一个好习惯,我认为应该完全避免。
【讨论】: