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って全くの嘘だなと思います。