blogチュートリアル(10) データのバリデーション
前のステップで、データを追加するフォームのタイトルや本文に何も入力しなくても、データが登録されてしまうことに気づいた方もいらっしゃるでしょう。
今回は、このフォームのウィジェットにバリデーションルールを設定して、空文字列のデータが登録されないようにします。
バリデーターの設定
フォームにバリデーションを設定するには、フォームクラスで対応するフィールドにバリデーターを設定します。 lib/form/doctrine/PostForm.class.php
をエディタで開き、configure
メソッドを以下のように修正してください。
public function configure() { $this->useFields(array('id', 'title', 'body')); $ws = $this->getWidgetSchema(); $ws['title'] ->setAttribute('maxlength', 50); $ws['body'] ->setAttribute('cols', 30) ->setAttribute('rows', 3); $vs = $this->getValidatorSchema(); $vs['title'] ->setOption('required', true) ->setMessage('required', '未入力です'); $vs['body'] ->setOption('required', true) ->setMessage('required', '未入力です'); }
このコードでは、title
フィールド、およびbody
フィールドのそれぞれのバリデーターを設定しなおしています。 また、title
とbody
ウィジェットのHTML属性も設定しています。
各バリデータに、required(必須かどうか)の設定と、それらがエラーだった場合のエラーメッセージを指定しています。
CakePHPの場合、フィールドのバリデーションをモデルに記述するのに対して、symfonyの場合はモデルとフォームとは(連携していますが)独立しています。 したがって、フォームのフィールドのバリデーションはフォームクラスに記述します。
コードを編集したら保存して、ブラウザで再度入力フォームに戻り、バリデーションが正しく動作していることを確認してみましょう。
フォームのベースクラス(
BasePostForm.class.php
)には、生成されたデフォルトのウィジェットやバリデーターが記述されています。 このクラスのコードを見ると、文字列のフィールドでは、フィールドサイズによって自動的にバリデーションルールが設定されていることがわかります。 スキーマでフィールドをnot nullに設定した場合は、バリデーターにrequired=trueオプションが設定されます。
インデックス
Document Index
関連ページリスト
Related Pages
blogチュートリアル(1) Symfonyの準備
blogチュートリアル(2) データベースの設定
blogチュートリアル(3) スキーマの定義とテーブルの生成
blogチュートリアル(4) 追加の設定
blogチュートリアル(5) mod_rewriteについてと、初期表示の確認
blogチュートリアル(6) モデルの作成
blogチュートリアル(7) postモジュールの作成
blogチュートリアル(8) ビューの作成
blogチュートリアル(9) 記事の追加
blogチュートリアル(10) データのバリデーション
blogチュートリアル(11) 投稿記事の削除
blogチュートリアル(12) 投稿記事の編集
blogチュートリアル(13) ルーティング
blogチュートリアル(14) まとめと応用

日本語ドキュメント
Japanese Documents
2011/01/18 Chapter 17 - Extending Symfony
2011/01/18 The generator.yml Configuration File
2011/01/18 Les tâches
2011/01/18 Emails
2010/11/26 blogチュートリアル(8) ビューの作成

