Symfony3忽略表单子项的validation.yml
我不知道发生了什么,因为它过去是工作的,现在突然不工作了 因此,让我们从Symfony3忽略表单子项的validation.yml,validation,symfony,Validation,Symfony,我不知道发生了什么,因为它过去是工作的,现在突然不工作了 因此,让我们从控制器开始: $user = new User(); $studio = new Studio(); $transformer = new StudioAccountDataTransformer($user, $studio); $form = $this->createForm(StudioAccountForm::class, $transforme
控制器开始:
$user = new User();
$studio = new Studio();
$transformer = new StudioAccountDataTransformer($user, $studio);
$form = $this->createForm(StudioAccountForm::class, $transformer);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
// isValid always true
}
现在是StudioAccountForm
:
public function buildForm(FormBuilderInterface $builder, array $option)
{
$builder
->add('user', UserType::class, [
'label' => false
])
->add('studio', StudioType::class, [
'label' => false
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'translation_domain' => 'general',
'data_class' => 'AppBundle\Entity\DataTransformer\StudioAccountDataTransformer',
'attr' => ['novalidate' => 'novalidate'],
'cascade_validation' => true,
'validation_groups' => ['Default', 'admin']
]);
}
和UserType
(StudioType看起来很相似,没有什么特别之处)
StudioAccountDataTransformer
只是studio
和用户的getter/setter。
下面是validation.yml
AppBundle\Entity\User:
properties:
firstName:
- NotBlank:
groups: [api, admin]
- Length:
min: 2
max: 255
groups: [api, admin]
lastName:
- NotBlank:
groups: [api, admin]
- Length:
min: 2
max: 255
groups: [api, admin]
在config.yml
中
validation: { enabled: true, enable_annotations: false }
如您所见,StudioAccountForm
包含了另外两个表单,分别是UserType
和StudioType
,我应该从UserType
中得到错误,因为验证组
配置正确。此外,还启用了cascade\u验证。不知何故,验证并没有以这种方式工作(我很确定它是工作的)
注意:如果我只将UserType
放在Controller
的createForm()函数中,那么有效性就起作用了。显然,.yml
文件已加载
有什么想法吗?我终于明白了
因此,从Symfony 2.8日志
The "cascade_validation" option was deprecated. Use the "constraints"
option together with the `Valid` constraint instead. Contrary to
"cascade_validation", "constraints" must be set on the respective child forms,
not the parent form.
因此,我应该使用Valid
约束,而不是使用cascade\u验证,如下例所示
public function buildForm(FormBuilderInterface $builder, array $option)
{
$builder
->add('user', UserType::class, [
'label' => false,
'constraints' => [
new Valid()
]
])
->add('studio', StudioType::class, [
'label' => false,
'constraints' => [
new Valid()
]
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'translation_domain' => 'general',
'data_class' => 'AppBundle\Entity\DataTransformer\StudioAccountDataTransformer',
'attr' => ['novalidate' => 'novalidate'],
'validation_groups' => ['Default', 'admin']
]);
}
我终于明白了
因此,从Symfony 2.8日志
The "cascade_validation" option was deprecated. Use the "constraints"
option together with the `Valid` constraint instead. Contrary to
"cascade_validation", "constraints" must be set on the respective child forms,
not the parent form.
因此,我应该使用Valid
约束,而不是使用cascade\u验证,如下例所示
public function buildForm(FormBuilderInterface $builder, array $option)
{
$builder
->add('user', UserType::class, [
'label' => false,
'constraints' => [
new Valid()
]
])
->add('studio', StudioType::class, [
'label' => false,
'constraints' => [
new Valid()
]
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'translation_domain' => 'general',
'data_class' => 'AppBundle\Entity\DataTransformer\StudioAccountDataTransformer',
'attr' => ['novalidate' => 'novalidate'],
'validation_groups' => ['Default', 'admin']
]);
}