$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

symfonyで日付間のバリデートをする方法

 開始日時と終了日時の間で、「開始日時が終了日時より後であればエラー」というようなバリデータを作りたい場合は次のようにします。

$this->validatorSchema->setPostValidator(
      new sfValidatorSchemaCompare('start_date', sfValidatorSchemaCompare::LESS_THAN_EQUAL, 'end_date',
        array('throw_global_error' => true),
        array('invalid' => '開始日時は終了日時より前に設定してください')
      )
    );

sfValidatorSchemaCompareの説明を少しします。形式としては、

$this->validatorSchema->setPostValidator($leftField, $operator, $rightField, $options, $messages);

というものです。


引数は

  • $leftField:比べたいフィールド名(左)
  • $operator:オペレータ
  • $rightField:比べたいフィールド名(右)
  • $options:オプション設定
  • $message:メッセージ設定

となっています。


$operatorには以下のようなものが使えます。

  • sfValidatorSchemaCompare::EQUAL
  • sfValidatorSchemaCompare::NOT_EQUAL
  • sfValidatorSchemaCompare::IDENTICAL
  • sfValidatorSchemaCompare::NOT_IDENTICAL
  • sfValidatorSchemaCompare::LESS_THAN
  • sfValidatorSchemaCompare::LESS_THAN_EQUAL
  • sfValidatorSchemaCompare::GREATER_THAN
  • sfValidatorSchemaCompare::GREATER_THAN_EQUAL


オプション設定部のthrow_global_optionオプションは、グローバルエラーとして投げるかどうか、決めることができます。


メッセージ設定部のinvalidオプションはバリデートに引っかかった場合のエラーメッセージを設定できます。


これらをつかえば、簡単なフィールド間のバリデートを作ることができますね!