我有一個嵌入式表格(對於Address
),它有各自屬性的驗證。我將此表單嵌入到父表單中(對於Person
),並且在父表單上有一個複選框,上面寫着「Person has a address?」之類的東西。有條件地禁用驗證嵌入式表格
當取消選中該複選框時,我想要禁用嵌入式Address
表單的所有驗證。或者,更好的是,如果我可以將嵌入式表單完全提交,那也可以。
我看着使用驗證組,但用例與我自己不匹配。
我有一個嵌入式表格(對於Address
),它有各自屬性的驗證。我將此表單嵌入到父表單中(對於Person
),並且在父表單上有一個複選框,上面寫着「Person has a address?」之類的東西。有條件地禁用驗證嵌入式表格
當取消選中該複選框時,我想要禁用嵌入式Address
表單的所有驗證。或者,更好的是,如果我可以將嵌入式表單完全提交,那也可以。
我看着使用驗證組,但用例與我自己不匹配。
好的,想通了。當添加在我的表單生成的AddressType
嵌入形式,我只是通過在選項確認團組,像這樣:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$form->add('address', new AddressType(), array(
'label' => 'Address',
'validation_groups' => function (FormInterface $form) {
if ($form->getParent()->get('toggleAddress')->getData() === false) {
return array();
}
return array('Default');
}
));
});
在驗證組功能,進行檢查,看是否切換,使地址處於關閉狀態。如果是這樣,返回一個空數組,並刪除所有驗證組,包括「默認」組。
是的,我希望不必有條件地添加嵌入的表單,如果可能的話。我喜歡向用戶展示表單,但將這些字段變灰。我會考慮這種方法,雖然 – Brian
在這種情況下,你應該混合我的兩個主張。依賴於驗證部分提交的數據的動態驗證組,並生成嵌入表單爲禁用,以便在後端禁用它,因此,如果禁用它,則不考慮提交的數據。無論如何,如果禁用了空白地址對象(可能由於數據庫限制而需要),您將需要更新底層對象以刪除空的地址對象。我公開給你的所有內容都可以通過表單組件中的事件來實現。 – egeloen