ump*_*sky 3 php forms validation symfony
我有一些复杂的形式,有几个子表单,我希望能够根据主窗体中选择的单选按钮分别验证每个子表单.我希望通过验证组实现这一目标.
注意:我没有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');
},
));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是不会触发此字段的验证.
当这工作时,我可以setDefaultOptions根据提交的数据轻松更改以验证所需的组:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function(FormInterface $form) {
$data = $form->getData();
return array($data['type']);
},
));
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
Vad*_*man 12
您必须将验证组名称传递给约束,而不是表单本身.通过将组名称分配给表单,可以指定要在验证中使用的约束.
更换
$builder->add('xxx', 'text', array(
'constraints' => array(
new Constraints\NotBlank(),
),
'validation_groups' => array(
'xxx',
)
))
;
Run Code Online (Sandbox Code Playgroud)
同
$builder->add('xxx', 'text', array(
'constraints' => array(
new Constraints\NotBlank(array(
'groups' => 'xxx'
)),
),
))
;
Run Code Online (Sandbox Code Playgroud)
默认情况下,约束具有" 默认 "(大写)组,并且表单使用此组来验证是否未指定.如果您希望其他约束没有显式组进行验证,则指定的组将传递" 默认 " 组.
$resolver->setDefaults(array(
'validation_groups' => function(FormInterface $form) {
$data = $form->getData();
return array($data['type'], 'Default');
},
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4005 次 |
| 最近记录: |