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);
+       }
+
+
 }