操作
Backport(バックポート) #3287
未完了sfValidatorDateで「年」に 0 を入力した場合に空値として認識される
開始日:
2012-12-05
期日:
進捗率:
0%
予定工数:
説明
https://redmine.openpne.jp/issues/2882の修正時に発見。
現象¶
コミュニティイベントの作成時、「募集期日」の「年」に 0 と入力された状態(「月」「日」は入力しない)で送信しても「正しくありません。」と表示されずにイベントの作成が完了する。
原因¶
入力チェックに使用しているクラスsfValidatorDate内で入力値のEmptyチェックを行っています(sfValidatorDateクラスのisEmptyメソッド)が、与えられた引数がarrayの場合に「array_filter」という関数を使用しています。
この関数は(http://php.net/manual/ja/function.array-filter.phpより)
コールバック関数が与えられなかった場合、 input のエントリの中で FALSE と等しいもの (boolean への変換 を参照ください) がすべて削除されます。
ということで、年に入力された0がfalse扱いされ削除されます。
その後Emptyチェックを行うため、年に0のみが入力された場合、Emptyと判定され必須項目ではないためエラーチェックに引っかかりません。
修正内容¶
sfValidatorDateでなく、opValidatorDateを使用するようにする。
但し、#2882の修正が必要。
Yuya Watanabe さんがほぼ12年前に更新
- 対象バージョン を OpenPNE 3.8.4 から OpenPNE 3.8.x に変更
本体側で sfValidatorDate を直接用いているところがありません.
自動生成の lib/form/doctrine/base 以下には存在していますが,この部分を変更する場合の影響範囲を調査する時間が必要なため, 一旦 OpenPNE 3.8.4 からは外します.
操作