Php 在Symfony2 form builder中允许选择字段类型的所有值
我有一段时间的问题,我读了很多关于这个主题的类似问题,但不能实现在我的情况下的答案 我有一个用Ajax填充的select字段。因此,在我的form builder中,我有以下代码: VilleType.php 但是我的表单从不验证,因为它们在这个选择字段中没有价值。但我不能在里面添加值,因为我事先不知道用户将输入什么值 所以我的问题是如何从Symfony禁用此字段的验证。或者允许它接受所有值 谢谢 编辑 在这里,我尝试了一种新的方法。我使用事件侦听器修改我的字段,其值大于用户提交的值Php 在Symfony2 form builder中允许选择字段类型的所有值,php,forms,symfony,formbuilder,choicefield,Php,Forms,Symfony,Formbuilder,Choicefield,我有一段时间的问题,我读了很多关于这个主题的类似问题,但不能实现在我的情况下的答案 我有一个用Ajax填充的select字段。因此,在我的form builder中,我有以下代码: VilleType.php 但是我的表单从不验证,因为它们在这个选择字段中没有价值。但我不能在里面添加值,因为我事先不知道用户将输入什么值 所以我的问题是如何从Symfony禁用此字段的验证。或者允许它接受所有值 谢谢 编辑 在这里,我尝试了一种新的方法。我使用事件侦听器修改我的字段,其值大于用户提交的值 pu
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('nomComplet', 'choice');
$builder->get('nomComplet')->addEventListener(
FormEvents::PRE_SUBMIT, function(FormEvent $event) /* use ($formModifier) */ {
$ville = $event->getData();
$event->getForm()->add('nomComplet', 'choice', array('choices' => $ville));
// $formModifier($event->getForm()->getParent(), $ville);
}
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB\AdresseBundle\Entity\Ville'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_adressebundle_ville';
}
}
MDB\adresebundle\Entity\Ville.php
这应该行得通
演示此案例的整个项目:
删除/更改文件时的代码:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('choiceField', 'choice', array(
'attr' => array(
'class' => 'choiceField'
)
))
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$form->remove('choiceField');
$form->add('choiceField', 'choice', array(
'attr' => array(
'class' => 'choiceField',
),
'choices' => array(
$data['choiceField'] => $data['choiceField'],
)
));
});
$builder->add('save', 'submit');
}
所以我的问题是如何从Symfony禁用此字段的验证
根据,您可以使用POST_SUBMIT事件抑制表单验证,并防止调用ValidationListener
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$event->stopPropagation();
}, 900); // Always set a higher priority than ValidationListener
请向我们提供有关NomComplett实体字段的更多详细信息:您实体中该字段的字段类型/ORM设置/该字段的值(实体、文本/整数)对不起,回复时间,您可以查看我的编辑。Thx:)我现在没有时间测试,但它看起来像我需要的,所以我让你的答案被接受,稍后会给出反馈:)谢谢,我试过了,效果很好,真的谢谢;)工作正常,但现在您可以手动添加更多选项,它们将是有效的选择,有什么方法可以防止这种情况发生吗?
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('choiceField', 'choice', array(
'attr' => array(
'class' => 'choiceField'
)
))
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$form->remove('choiceField');
$form->add('choiceField', 'choice', array(
'attr' => array(
'class' => 'choiceField',
),
'choices' => array(
$data['choiceField'] => $data['choiceField'],
)
));
});
$builder->add('save', 'submit');
}
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$event->stopPropagation();
}, 900); // Always set a higher priority than ValidationListener