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) ビューの作成