sfForm エラーの記述方法

sfValidatorCallback

  • symfony sfForm機能にはさまざまなValidatorがありますが、オリジナルのチェック処理を記述したい場合があります。そんなときは、Formクラスにメソッドを記述し、sfValidatorCallbackで呼び出されるようにします。
class MyForm extends BaseForm
{
  public function configure()
  {
       $this->getValidatorSchema()->setPostValidator(
           new sfValidatorCallback(array('callback' => array($this, 'validateCount')))
       );
  }
}


オリジナルのバリデートメソッド

  • エラーの通知には、個別の項目ごとのエラーと、フォーム全体のエラー(グローバルエラー)があり、記述方法が異なります。
// MyForm class
public function validateCount(sfValidatorBase $validator, $values)
{
    // hogehogeフィールドのエラーとして通知する
    if ($values['hogehoge_count'] == 0) {
        $errors = array(
            'hogehoge' => new sfValidatorError($validator, 'hogehoge countがゼロです!')
        );
        throw new sfValidatorErrorSchema($validator, $errors);
    }
    
    // グローバルエラーとして通知する
    if ($values['hogehoge_count'] > 100) {
        throw new sfValidatorError($validator, 'hogehoge count が100を超えています!');
    }
    
    return $values;
}


テンプレートの記述

  • 蛇足ですが、テンプレートの記述方法をおさらい。
<?php echo $form->renderGlobalErrors() ?>

<?php echo $form['hogehoge']->renderError() ?>

facebook slideshare rubygems github qiita