16

私は Symfony 2 Web フレームワークを初めて使用し、非常に基本的な検証タスクに苦労しています。投稿へのリンクを作成するために使用するPostmember を持つエンティティ モデルがあります。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.

4

1 に答える 1

35

app/config/config.yml で検証を有効にしましたか?

...

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

...

また、アノテーションを使用して検証を定義する場合は、検証と注釈の検証の両方を有効にする必要があります。

...

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

...

app/cacheそして、ディレクトリをクリアすることを忘れないでください。

于 2012-09-26T12:01:05.260 に答える