私は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
を返すのかを知ることができませんでした。
私のconfig.ymlは、次のように言っています: 'framework:validation:{enable_annotations:true}';私はこれが検証を可能にすると仮定 - そして私は間違っていた...迅速な助けをありがとう、なぜ私はこれを見つけることができなかったのか分からない。 – nijansen
アノテーションを使用する場合は、両方のパラメータを使用する必要があります。私は私の答えを編集しました。 – AlterPHP
ありがとう、私はそれに応じて自分の設定を更新しました。今は魅力のように機能します。 – nijansen