首页 > 解决方案 > 插入错误数据时验证如何给出错误。在 symfony 中处理 isValid()?

问题描述

控制器功能:

public function new(Request $request)  
    {  
        $post = new Post();  
        $form = $this->createForm(PostType::class, $post);     

        $form->handleRequest($request);

        if ($form->isSubmitted()){

        if($form->isValid()) {
            die('working');
        }
        else
        {
            die("error");
        }
    }

        return $this->render('post/index.html.twig',[
            'form' => $form->createView(),
        ]);
    }

在 config/validator/validation.yaml

App\Entity\post:  
    properties:  
        title:  
            - Length:  
                min: 2  
                max: 50  
                minMessage: 'Your first name must be at least {{ limit }} characters long'  
                maxMessage: 'Your first name cannot be longer than {{ limit }} characters'

表格类:

class PostType extends AbstractType {  
    public function buildForm(FormBuilderInterface $builder, array $options)  
    {  
        $builder  
            ->add('title',TextType::class,[  
                'attr' => [  
                    'placeholder' => 'Enter Title',  
                    'class' => 'Some Class',  
                ]  
            ])  
            ->add('description',TextareaType::class,[  
                'attr' => [  
                    'placeholder' => 'Enter Description',  
                    'class' => 'Some Class'  
                ]  
            ])  
            ->add('Save',SubmitType::class,[  
                'attr' => [  
                    'class' => 'btn btn-success'  
                ]  
            ])  
        ;
    }

我还添加了

validation: { enable_annotations: true } 在 config/packages/framework.yaml

问题:我在标题中插入了一个字母“z”。它应该返回验证错误。isValid() 应该给出 false,但它给出的是 true。谁能告诉我如何在这里使用验证?

标签: phpformsvalidationsymfony4

解决方案


enable_annotations: true意味着您通过注释定义验证约束。注释看起来像这样:

class Author
{
    /**
     * @Assert\NotBlank    // apply NotBlank validator
     */
    public $name;
}

在您的代码中,您使用在yaml文件中定义的验证规则,因此它绝对不是注释。

因此,要么将验证规则移动到 annotations,要么remove enable_annotations:true,只留下

validation: { enabled: true }

推荐阅读