Home | Symfony2Doc

このページのコンテンツ

ソース



クイックリンク


コメントリスト

Powered by Disqus

ご質問や翻訳不備等お気軽にコメントください。


コンテンツ上部に更新日の記載のないページは、翻訳の内容が2.0相当のものになっております。最新の内容は原文のページをご確認ください。

blogチュートリアル(8) データのバリデーション

Note

この記事は、Symfony 2.5.6 で動作確認しています。

今回は、このフォームにバリデーションルールを設定して、正しくデータが登録できるようにします。

バリデータの設定

フォームのバリデーションを有効にするには、YAMLやXMLで設定ファイルを記述するか、 アノテーションやPHPコードでモデルに直接記述します。 以前のステップでORMの設定をアノテーションで記述したので、 バリデーションもアノテーションで記述します。

src/My/BlogBundle/Entity/Post.php を開いて、$title$body の変数定義箇所を以下のように変更します(use 行を追加していることに注意してください)。

// src/My/BlogBundle/Entity/Post.php
use Symfony\Component\Validator\Constraints as Assert;

// ...

    /**
     * @ORM\Column(name="title", type="string", length=255)
     * @Assert\NotBlank()
     * @Assert\Length(min=2,max=50)
     */
    protected $title;

    /**
     * @ORM\Column(name="body", type="text")
     * @Assert\NotBlank()
     * @Assert\Length(min=2)
     */
    protected $body;

// ...

Symfony\Component\Validator\Constraints 名前空間を Assert という別名で読み込み、 各バリデーションルールを記述しています。NotBlankMinLength など、 バリデーションの意味は文字通りです。 バリデーションに利用できる制約の一覧や詳細は、制約リファレンスを参照してください。

ブラウザで確認

再び、記事の追加画面をブラウザで確認してみてください。 今度は、どちらのフォームにも1文字ずつ入れて送信すると、 英語のエラーメッセージが表示されるようになったはずです。

Note

最近のブラウザを使っている人は、フォームタグの novalidate 属性を削除してみてください。 データを追加するフォームのタイトルや本文に何も入力しないで送信しようとすると、 警告がでてくるため、バリデーションが効いているものと思ったことでしょう。 Formオブジェクトが自動的に HTML5 の required 属性を出力したためです。 このようなクライアントサイドフォームバリデーションは便利ですが、Webブラウザが対応していなければ実行されませんので、 必ずサーバーサイドでのバリデーションも実装するようにしてください。

blog comments powered by Disqus