如何检查子表单有效性?如何为子表单配置特定验证组约束?
嘿,我来帮你搞定这两个Symfony表单的问题!
1. 如何检查子表单是否有效?
在Symfony框架里,检查子表单有效性很简单——你只需要先通过父表单的get()方法拿到子表单实例,然后调用它的isValid()方法就行啦。不过要注意,一定要先让父表单处理请求(调用handleRequest()或者submit()),不然子表单的验证状态还没更新,检查结果会不准确。
举个实际代码例子:
// 假设你的父表单实例是$form,子表单的名称是bankAccount $childForm = $form->get('bankAccount'); if ($childForm->isValid()) { // 这里写子表单验证通过后的逻辑 }
2. 为子表单指定特定验证组的约束
其实你不用找特殊约束,直接在添加子表单时配置validation_groups选项就可以实现需求啦,这样整个子表单都会使用你指定的验证组进行验证。比如你可以这么写:
->add('bankAccount', BankAccountFormType::class, [ 'validation_groups' => [ Person::TYPE_CUSTOMER, Person::TYPE_WITNESS, Person::TYPE_INSURED_PERSON ] ])
如果你只是想让子表单里的某个特定字段使用这些验证组,而不是整个子表单,那可以在子表单类型(也就是BankAccountFormType)的buildForm方法里,给目标字段设置约束时指定groups,就像你一开始设想的那样:
// 在BankAccountFormType的buildForm方法中 $builder->add('accountNumber', TextType::class, [ 'constraints' => [ new NotBlank([ 'groups' => [ Person::TYPE_CUSTOMER, Person::TYPE_WITNESS, Person::TYPE_INSURED_PERSON ] ]) ] ]);
小补充:默认情况下子表单会继承父表单的验证组,但如果你显式设置了validation_groups,就会覆盖继承行为,只用你指定的那些组哦。
内容的提问来源于stack exchange,提问作者olek07
相关产品推荐
相关产品推荐

