[Symfony1.4] PostValidatorで個別のフィールドにバリデーションエラーを設定する方法
Symfony1.4にて、PostValidatorで個別のフィールドにバリデーションエラーを設定する方法を調べたのでメモ。
・参考:postValidatorから個別のフィールドにエラーを設定 – ゆっくり*ゆっくり
最初は、単純に sfValidatorError を使って、バリデーションエラーメッセージを表示させていたのですが、この書き方だとGlobalErrorになります。
// ログインIDの重複チェックをするバリデータ class ValidatorSameLoginId extends sfValidatorBase{ protected function doClean($value){ // DBから同じログインIDのレコードを取得 $user = UserTable::getInstance()->getOneByLoginId($value['login_id']); // 同じログインIDのレコードが既に存在する場合、バリデーションエラー if($user != false){ throw new sfValidatorError($this, '同じログインIDが既に登録されています', array('value' => $value)); } return $value; } } |
これを単一のフィールドに対するエラーであるNamedErrorにするには、
if($user != false){ throw new sfValidatorError($this, '同じログインIDが既に登録されています', array('value' => $value)); } |
の部分を、sfValidatorErrorSchema を使って以下のように書き換えると、個別のフィールドにバリデーションエラーを表示させることができます。
・symfony API » sfValidatorErrorSchema Class | symfony | Web PHP Framework
class ValidatorSameLoginId extends sfValidatorBase{ protected function doClean($value){ // DBから同じログインIDのレコードを取得 $user = UserTable::getInstance()->getOneByLoginId($value['login_id']); // 同じログインIDのレコードが既に存在する場合、バリデーションエラー if($user != false){ throw new sfValidatorErrorSchema($this, array( 'login_id' => new sfValidatorError($this, '同じログインIDが既に登録されています'), )); } return $value; } } |
以上です。