【问题标题】:YML validation file is ignoredYML 验证文件被忽略
【发布时间】:2012-09-18 01:00:38
【问题描述】:

我是 Symfony 2 Web 框架的新手,并且正在努力完成一项非常基本的验证任务。我有一个实体模型Post,它有一个成员slug,我用它来建立帖子的链接。在Post.orm.yml 中,我定义了unique: true,并希望将此约束也包含在验证器中。

我已经创建了一个文件validation.yml:

# src/OwnBundles/BlogpostBundle/Resources/config/validation.yml

OwnBundles\BlogpostBundle\Entity\Post:
    properties:
        slug:
            - NotBlank: ~
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: slug

我的控制器中的创建功能很简单:

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

    if($request->getMethod() == 'POST')
    {
        $form->bind($request);
        if($form->isValid())
        {
            $em = $this->getDoctrine()->getManager();
            $em->persist($post);
            $em->flush();
            return $this->redirect(
                $this->generateUrl('own_bundles_blogpost_homepage')
            );
        }
    }
    return $this->render(
        'OwnBundlesBlogpostBundle:Default:add.html.twig',
        array(
            'title' => 'Add new blogpost',
            'form' => $form->createView(),
        )
    );
}

基本页面流运行良好,我可以添加帖子并查看它们,但如果我复制帖子标题以测试我的验证,它会引发异常:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'。我已经浏览了很长一段时间的文档,但我无法找出为什么我的$form->isValid() 返回true

【问题讨论】:

    标签: php validation symfony yaml


    【解决方案1】:

    您是否在 app/config/config.yml 中启用了验证?

    ...
    
    framework:
        ...
        validation:    { enabled: true }
        ...
    
    ...
    

    如果你也想用注释定义验证,你必须同时启用验证和注释验证:

    ...
    
    framework:
        ...
        validation:    { enabled: true, enable_annotations: true }
        ...
    
    ...
    

    然后不要忘记清除app/cache 目录。

    【讨论】:

    • 我的 config.yml 说:framework: validation: { enable_annotations: true };我认为这可以进行验证 - 我错了......感谢您的快速帮助,我不知道为什么我找不到这个。
    • 如果你也想使用注解,你必须同时使用这两个参数。我编辑了我的答案。
    • 谢谢,我已经相应地更新了我的配置。现在它就像一个魅力。
    • 我在 github 上创建了一个问题,以便在验证组件的文档中更清楚地说明这一点:github.com/symfony/symfony-docs/issues/4268
    • symfony 文档只说“默认情况下启用 Symfony 验证器”symfony.com/doc/current/book/… 错误!糟糕的symfony,糟糕! :D
    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多