Forms 带有集合验证的Symfony表单松散集合数据,不会持久化
我创建了两个实体,其中一个用作另一个的集合 在这两个实体上,我都希望应用验证规则,但这样做时,我在验证集合时遇到两个问题: 如果我正确填写了所有必填字段(在main和collection中),则实体将被持久化 但如果我没有填写一个必填字段Forms 带有集合验证的Symfony表单松散集合数据,不会持久化,forms,symfony,symfony-forms,Forms,Symfony,Symfony Forms,我创建了两个实体,其中一个用作另一个的集合 在这两个实体上,我都希望应用验证规则,但这样做时,我在验证集合时遇到两个问题: 如果我正确填写了所有必填字段(在main和collection中),则实体将被持久化 但如果我没有填写一个必填字段 我再也坚持不下去了,因为即使是我以后也会填上所有的必修课 字段我仍然有集合的验证错误消息 当我提交时,在集合中填写的(其他)数据丢失 奇怪的是(或不奇怪的是),如果我填写了主表单的必填部分,而不是收集部分,如果我提交,则会保留主表单中的数据。但反过来就不行了
class InstitutionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'label' => 'name',
'label_attr' => ['class' => 'mandatory'],
])
->add('institutionContacts', CollectionType::class, [
'label' => 'user.institutionContact',
'attr' => [
'class' => 'collectiondata',
],
'required' => true,
'constraints' => new Valid(),
'entry_type' => new InstitutionContactType($this->manager),
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
]);
...
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Institution::class,
'translation_domain' => 'SimusanteSimustoryBundle',
'attr'=>['novalidate'=>'novalidate'], //disable html5 validation
]);
}
}
你找到解决这个问题的方法了吗?唉,没有,但现在我在提交之前对所有必填字段进行JS检查。它很脏而且不理想,但我至今还没有找到解决方案。你找到解决方案了吗?唉,没有,但现在我在提交之前对所有必填字段进行了JS检查。它很脏而且不理想,但我至今还没有找到解决办法。
class InstitutionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'label' => 'name',
'label_attr' => ['class' => 'mandatory'],
])
->add('institutionContacts', CollectionType::class, [
'label' => 'user.institutionContact',
'attr' => [
'class' => 'collectiondata',
],
'required' => true,
'constraints' => new Valid(),
'entry_type' => new InstitutionContactType($this->manager),
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
]);
...
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Institution::class,
'translation_domain' => 'SimusanteSimustoryBundle',
'attr'=>['novalidate'=>'novalidate'], //disable html5 validation
]);
}
}