[Symfony1.4][Validator] カスタムバリデータを作成する方法

Tadashi Shigeoka ·  Mon, October 10, 2011

 

Symfony1.4で、カスタムバリデータを作成する方法を調べて、実践したのでメモ。  

まず、カスタムバリデータを作る前に、自分が使いたいバリデータが既存のものにないか確認します。  

symfony Forms in Action | 付録 B - バリデータ | symfony | Web PHP Framework  

使いたいバリデータがない場合は、自分で作ります。  

カスタムバリデータを作るときに参考になった記事は、Symfony1.4だと以下の通りです。  

The More with symfony book | カスタムウィジェットとバリデータ | symfony | Web PHP Framework

symfonyでカスタムバリデータを使ってフィルタを実装する - spanstyle::monolog

symfonyのValidatorで全角/半角変換などを行う - ゆっくり*ゆっくり  

実際に、書籍を特定するための番号であるISBNを入力値の長さと文字の構成を確認するバリデータを作ってみました。  

ちなみに、ISBNは、ISBN-10だと10桁で、1桁目が 0 ~ 9 、X が使用され、他の桁は数字です。ISBN-13は13桁で、数字のみで構成されています。  

・参考:ISBN - Wikipedia  

正規表現の使い方はこちらを参考にしました。  

正規表現 | PHP Labo

正規表現  

そして、実際に作ったのが下記のソースになります。  

■ myValidatorIsbn.class.php  

(ISBNの形式に合ってるか確認するバリデータ)  

 $value));
      }
    }
    
    // 入力値の長さが13文字の場合、そのまま入力値を返す
    if (strlen($value) == 13){
      // ISBN-13は数字のみで構成される
      if (preg_match("/^[0-9]{13}?$/" ,$value))
      {
        return $value;
      } else {
        throw new sfValidatorError($this, 'ISBN-13は数字のみで入力して下さい', array('value' => $value));
      }
    }
    // それ以外の場合、エラー
    throw new sfValidatorError($this, 'ISBNは10文字、または13文字で入力して下さい', array('value' => $value));
  }
}

 

■ IsbnSearchForm.class.php  

(ISBNの入力フォームを定義しているフォームファイル)  

setWidgets(array(
      'isbn' => new sfWidgetFormInput(array(), array('size' => 20, 'maxlength' => 13, )),
    ));
    
    $this->setValidators(array(
      'isbn' => new myValidatorIsbn(array('required' => true, ),
                      array('required' => '未入力', )),
    ));
    
    $this->widgetSchema->setNameFormat('isbn_search[%s]');
    
    $this->widgetSchema->setLabels(array('isbn' => 'ISBN10/13', ));
  }
}

 

以上です。