プロジェクト

全般

プロフィール

Enhancement(機能追加・改善) #2275

完了

opValidatorDate の date_format_range_error が直書きされているので option で変更できるようにする

Minoru Takai さんが13年以上前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Urgent(急いで)
担当者:
対象バージョン:
開始日:
2011-07-14
期日:
進捗率:

100%

予定工数:

説明

背景

#754 では opValidatorDate で配列でない入力値に対しての下限・上限のバリデートがされていない問題が修正されていますが、そこではバリデートに引っかかった場合に出力するエラーメッセージに用いる日付のフォーマットが直に書かれています。

opValidatorDate クラスでは、許容範囲外の日付が入力された場合のエラーメッセージのフォーマットに 'Y-m-d' を用いるという仕様であっても良いとは思いますが、そうであっても不用意に拡張性を低下させないようにしたほうが好ましい思います。

  • (1) 例外時のフォーマットは $this->getOption('date_format_range_error') を用いるようにする
  • (2) opValidatorDate クラスでこのデフォルト値を 'Y-m-d' とすべきだと考えるのであれば、 $this->getOption('date_format_range_error') のデフォルト値をこのクラス内で 'Y-m-d' にセットする

#754 の修正内容を含めて考察しましたが、(2) の必要性は特に見当たらないので (1) のみ対応します(デフォルト値は sfValidatorDate と同様になります。関連 #1630 )。

概要

メンバー側のプロフィール入力ページでは、日付のプロフィール項目は opValidatorDate を用いている。

管理画面でのプロフィール項目設定で指定された最小値や最大値を超える日付を入力した場合などにはエラーメッセージが表示されるが、そこで併せて表示される日付のフォーマットは opValidatorDate を使う限り 'Y-m-d' に固定されてしまっている。

修正方針

opValidatorDate のインスタンスを生成する時点で設定できる $option には、この範囲エラー時の日付フォーマットを指定するための date_format_range_error オプションが用意されている。これを opValidatorDate 内で用いるようにし、日付のフォーマットは opValidatorDate のインスタンスを生成する時点で指定できるようにする。

修正内容

lib/util/opFormItemGenerator.class.php

@@ -233,6 +233,7 @@ class opFormItemGenerator

     if ($field['FormType'] === 'date')
     {
+      $option['date_format_range_error'] = 'Y-m-d';
       $obj = new opValidatorDate($option);
       return $obj;
     }
lib/validator/opValidatorDate.class.php

@@ -56,7 +56,7 @@ class opValidatorDate extends sfValidatorDate
       $max = new DateTime($this->getOption('max'));
       if ($max && $clean->format('U') > $max->format('U'))
       {
-        throw new sfValidatorError($this, 'max', array('max' => $max->format('Y-m-d')));
+        throw new sfValidatorError($this, 'max', array('max' => $max->format($this->getOption('date_format_range_error'))));
       }
     }

@@ -65,7 +65,7 @@ class opValidatorDate extends sfValidatorDate
       $min = new DateTime($this->getOption('min'));
       if ($min && $clean->format('U') < $min->format('U'))
       {
-        throw new sfValidatorError($this, 'min', array('min' => $min->format('Y-m-d')));
+        throw new sfValidatorError($this, 'min', array('min' => $min->format($this->getOption('date_format_range_error'))));
       }
     }

補足

date_format_range_error については http://www.symfony-project.org/forms/1_4/ja/B-Validators にも記述されている。


関連するチケット 2 (1件未完了1件完了)

関連している OpenPNE 3 - Bug(バグ) #1630: The error message of the profile item of the date type is not suitable (日付型のプロフィール項目のエラーメッセージが不適切)Invalid(無効)2010-09-30

操作
関連している OpenPNE 3 - Bug(バグ) #940: プロフィール項目の日付やテキストの最小値を最大値より大きくして設定できてしまうPending Fixing(修正待ち)2010-04-05

操作

他の形式にエクスポート: Atom PDF