![](/img/trans.png)
[英]How to do conditional form validation which is based on user submitted data in symfony2?
[英]Symfony2 form validation groups based on submitted data
我有一些復雜的形式,有幾個子表單,我希望能夠根據主窗體中選擇的單選按鈕分別驗證每個子表單。 我希望通過驗證組實現這一目標。
注意:我沒有data_class
模型,我使用數組。
這是我簡化的表格:
class MyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('xxx', 'text', array(
'constraints' => array(
new Constraints\NotBlank(),
),
'validation_groups' => array(
'xxx',
)
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function(FormInterface $form) {
return array('xxx');
},
));
}
}
問題是不會觸發此字段的驗證。
當這工作時,我可以輕松更改setDefaultOptions
以根據提交的數據驗證所需的組:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function(FormInterface $form) {
$data = $form->getData();
return array($data['type']);
},
));
}
任何想法?
您必須將驗證組名稱傳遞給約束,而不是表單本身。 通過將組名稱分配給表單,您可以指定要在驗證中使用的約束。
更換
$builder->add('xxx', 'text', array(
'constraints' => array(
new Constraints\NotBlank(),
),
'validation_groups' => array(
'xxx',
)
))
;
同
$builder->add('xxx', 'text', array(
'constraints' => array(
new Constraints\NotBlank(array(
'groups' => 'xxx'
)),
),
))
;
默認情況下,約束具有“ 默認 ”(大寫)組,並且表單使用此組來驗證是否未指定。 如果您希望其他約束沒有顯式組進行驗證,則指定的組將傳遞“ 默認 ”組。
$resolver->setDefaults(array(
'validation_groups' => function(FormInterface $form) {
$data = $form->getData();
return array($data['type'], 'Default');
},
));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.