验证约束不适用于我的 Symfony3 项目

fli*_*iim 5 validation symfony

我无法使我的验证约束$form->isValid()起作用。即使我输入的长度小于 10,书名也始终有效...

在我的 AppBundle\Resources\config\validation\book.yml 上

AppBundle\Entity\Book:
properties:
    bookName:
        - NotBlank: ~
        - Length:
            min: 10
Run Code Online (Sandbox Code Playgroud)

都不来自 formBuilder

$builder->add('bookName', TextType::class, array(
            'constraints' => new Length(array('min' => 10))))
Run Code Online (Sandbox Code Playgroud)

这是我的framework.validation配置

framework:
    validation: ~
Run Code Online (Sandbox Code Playgroud)

默认配置是

framework:
    validation:
        enabled: true
        enable_annotations: false
Run Code Online (Sandbox Code Playgroud)

需要帮助请。

谢谢

fli*_*iim 4

我解决了我的问题。

这是因为我使用了表单类并且设置了如下所示的validation_groups :

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'validation_groups' => array('creation'),
        'data_class'        => 'AppBundle\Entity\Book',
    ));
}
Run Code Online (Sandbox Code Playgroud)

我没有在 formBuilder 选项中指定它。

$form = $this->createForm(BookType::class, $book);
if ($form->isValid()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

解决方案 1:从 Form 类默认选项中删除验证组的定义。

解决方案2:是添加验证组进行验证:

$form = $this->createFormBuilder($book, array(
    'validation_groups' => array('creation'),
))->add(...);
Run Code Online (Sandbox Code Playgroud)