それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

CakePHPで任意のバリデーション(パスワードの確認入力で一致しているか見る)

CakePHP ヴァリデーションについて調べていました。CakePHPはバリデーションもModelに書くのが決まりです。簡単です。ヴァリデーションのルールもたくさん用意されていて、すぐに使えます。ですが。Validationが多すぎて便利すぎて使いこなせない。

パスワードと確認パスワードの一致を見たい。

今回やりたかったことは、パスワードとパスワード確認の一致をみたい。アレコレみたり、コントローラーに直接書くてもありだと思いますが。

条件に文字列を書けば、その名前のメソッドを探して実行する。

というのをつかってみた。

同一チェック関数を作る

まず、ヴァリデーションで実行される関数を作る

<?php
    //パスワードの同一性チェックをする。
    public function sameCheck($value , $field_name) {
        $v1 = array_shift($value);
        $v2 = $this->data[$this->name][$field_name];
        return $v1 == $v2;
    }

次に、作った関数が呼び出されるように実装する。

<?php
class Manager extends AppModel {
    //パスワードの強度をチェックする
    public function checkPassword($value ,$dummy= null) {
        return false;
    }
    //パスワードの同一性チェックをする。
    public function sameCheck($value , $field_name) {
        $v1 = array_shift($value);
        $v2 = $this->data[$this->name][$field_name];
        return $v1 == $v2;
    }

    public $validate = array(
        //#パスワード更新用
        'old_password' => array(
            'checkPassword' => array(
                'rule' => array('checkPassword'),
                'message' => 'パスワードが単純すぎます。',
                'allowEmpty' => false, #allowEmpty=>false にすると、こっちが優先されて、Validation関数が呼ばれない
                'required' => true,
                'last' => false, // Stop validation after this rule
            ),
        ),
        'password_confirm' => array(
            'sameCheck' => array(
                'rule' => array('sameCheck','password'),
                'message' => '新しいバスワードが一致しない',
                'allowEmpty' => false, #allowEmpty=>false にすると、こっちが優先されて、Validation関数が呼ばれない
                'required' => true,
                'last' => false, // Stop validation after this rule
            ),
        ),
    );
}


バリデーションで、条件に関数名を書けば、それがが実行される。単純ですが、これに気づくまでに時間がかかりますね。


簡単ですね。簡単です。

感想

たったこれだけのことをやるのに、覚えること多すぎてCoCって全くの嘘だなと思います。