Phalconで日付の比較バリデーションの方法をメモ。
開始日と終了日を入力するフォームがあった場合、開始日が終了日よりも後ろの日付にもしくは、終了日が開始日よりも前の日付になっていないかバリデーション。
ちなみに今回試したPhalconのバージョンはPhalcon5。
Phalconで日付の比較バリデーション
以下は、終了日のフォームにCallbackバリデーションを使用して実現しています。
開始日のフォームでバリデーションしてもOK。
use \Phalcon\Filter\Validation\Validator\Callback; $endDate = new Date('end_date'); $endDate->setLabel('終了日'); $endDate->addValidators([ new DateValidator([ 'format' => 'Y-m-d', 'message' => '終了日に日付を入力してください。' ]), new Callback([ 'callback' => function ($data) { if ($data['start_date'] && $data['end_date']) { if (strtotime($data['start_date']) > strtotime($data['end_date'])) { return false; } } return true; }, 'message' => '終了日は、開始日以降の日付を入力してください。' ]) ]); $this->add($endDate);
バリデーションの解説
new Callback([
Callbackバリデーションを定義しています。
'callback' => function ($data) {
$dataには送信されてきたFormデータがArrayで入っています。。
if ($data['start_date'] && $data['end_date']) { if (strtotime($data['start_date']) > strtotime($data['end_date'])) { return false; } } return true;
$data['start_date']が開始日(Y-m-d形式)、$data['end_date']が終了日(Y-m-d形式)。
strtotimeして日付を比較。
バリデーションエラーの場合に「return false」、バリデーションOKの場合は「return true」。