2012-09-26 12 views
14

私はSymfony 2 Webフレームワークを初めて使用しており、非常に基本的な検証作業に苦労しています。私は投稿へのリンクを構築するために使用するメンバーslugを持つエンティティモデルPostを持っています。 Post.orm.ymlで私はunique: trueを定義し、この制約をバリデータとしても含めたいと思っています。私のコントローラで作成機能は非常に簡単ですYML検証ファイルは無視されます

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

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

::私はファイルvalidation.ymlを作成している

基本的なページフローが正常に動作します

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を返すのかを知ることができませんでした。

答えて

33

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

... 

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

... 

、あなたはあまりにも注釈付き検証を定義したい場合は、あなたが検証および注釈検証を可能にするために、両方があります。

... 

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

... 

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

+1

私のconfig.ymlは、次のように言っています: 'framework:validation:{enable_annotations:true}';私はこれが検証を可能にすると仮定 - そして私は間違っていた...迅速な助けをありがとう、なぜ私はこれを見つけることができなかったのか分からない。 – nijansen

+0

アノテーションを使用する場合は、両方のパラメータを使用する必要があります。私は私の答えを編集しました。 – AlterPHP

+0

ありがとう、私はそれに応じて自分の設定を更新しました。今は魅力のように機能します。 – nijansen

関連する問題