Configに設定した値でバリデーション
Configに設定した値(例:パスワードはmin〜max文字以内)でバリデーションする方法の実装。
これで以前書いたバリデーション関連一通り達成。
自分でもエラーメッセージの出し方など、若干不満残るのですが、ひとまず ^^;
Config設定値は、追加のapp/config/config.phpに記載、bootstrap.phpで読み込み済み。
モデルごとのuser_model.phpに追加の関数でconfig設定値を読み出し、app_model.phpに追加のwrapper関数で本線のvalidate関数に渡す。
若干不満が残るのがエラー時のメッセージ。
今回対応したのがbetween、できればエラーメッセージで「x〜x文字以内で入力してください」のように出したかったのですが、$validateにルールを定義した段階の引数しか、エラーメッセージに引き渡せない模様。
なので、view側に求める文字数を表示させておいて、
通常
Between 4 to 12 characters
エラー時
Between 4 to 12 characters
Too short or Too long.
となるようにしました・・・。
改善の余地がある気がしますがひとまず。
以下、改修差分
Index: models/user.php =================================================================== --- models/user.php (revision 135) +++ models/user.php (working copy) @@ -8,6 +8,9 @@ var $validate = array( 'username' => array( + 'betweenWrapper' => array( + 'rule' => array('betweenUsername'), + ), 'alphaNumeric' => array( 'rule' => 'alphaNumeric', ), @@ -16,6 +19,9 @@ ), ), 'password1' => array( + 'betweenWrapper' => array( + 'rule' => array('betweenPassword'), + ), 'alphaNumeric' => array( 'rule' => 'alphaNumeric', ), @@ -36,5 +42,25 @@ ) ); + + function betweenUsername($data) + { + $idLength = Configure::read('User.UserId.Length'); + return self::betweenWrapper($data, $idLength); + } + + function betweenPassword($data) + { + $idLength = Configure::read('User.Password.Length'); + return self::betweenWrapper($data, $idLength); + } + + function betweenWrapper($data, $idLength) + { + $check = array_values($data); + + return parent::betweenWrapper($check[0], $idLength['min'], $idLength['max']); + } + } ?> \ No newline at end of file Index: models/app_model.php =================================================================== --- models/app_model.php (revision 135) +++ models/app_model.php (working copy) @@ -10,6 +10,7 @@ 'between' => __('Between %2$d and %3$d characters.', true), 'alphaNumeric' => __('Please input only alphameric characters.', true), 'compare2fields' => __('Please input same as above.', true), + 'betweenWrapper' => __('Too short or Too long.', true), ); $this->setErrorMessageI18n($error_messages, false); @@ -28,4 +29,11 @@ } } + /* 本線Betweenへのwrapper */ + function betweenWrapper($check, $min, $max) + { + return Validation::between($check, $min, $max); + } + + }