2012年6月3日日曜日

Symfonyでカスタムバリデータを作成 ちょいとハマッタのでメモ

提供されているバリデータでチェックできない要件があったので自前で作成。

作成するには、setPreValidator() もしくは、setPostValidator()で作成します。
それぞれの違いは下記のとおり。

setPreValidator()
フォームから送信された生のデータを使用できる。
setPostValidator()
フォームの値がクリーンされたデータを使用できる。

とりあえず、setPostValidator()を使用して実装。
内容としては、A項目とB項目の両項目に値が入力されていない場合はエラーにするというもの。
※どちらも空の場合はエラーにしない。

とりあえず、実装して動作確認。
よし!動いた!!
と、試験に取り合かかると、あるパターンの時のみチェックをスルーしてしまう事象が!
そのパターンとは、文字数制限をオーバーしているときに発生。

ん?なにゆえ?と少々悩みましたが、結局は凡ミスでした。
理由は 「setPostValidator()は、フォームの値がクリーンされたデータを使用できる」
ということです。
「クリーンされたデータ」ということは、文字数制限などに引っかかった値は”汚染された値”ということで、クリーン後は、空文字?のような扱いになり、作成したカスタムバリデータではフォームの生のデータではなく、クリーン後の空文字を取得していたためチェックに引っかかりませんでした。

なので、フォームから送信された生データを使用できる「setPreValidator()」に変更したところ
無事チェックが行えました。

次回からも気を付けねば。











0 件のコメント:

コメントを投稿