我刚开始学习Symfony 2框架,并且在一个非常基本的验证任务中遇到了困难。我有一个实体模型
我创建了一个名为
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]:完整性约束违例:1062重复条目“duplicate-slug”对于关键字“UNIQ_FAB8C3B3989D9B62”
。我已经浏览了相当长时间的文档,但我无法找出为什么我的$form->isValid()
返回true
。
framework: validation: { enable_annotations: true }
;我以为这样就可以启用验证了,但是我错了...感谢您的快速帮助,我不知道为什么找不到这个。 - nikolas