cakephp1.2 登録時と更新時で別のバリデートを実行したい&バリデートを複数定義して使い分けたい場合
保守という観点でもやっぱりバリデートはmodelにまとめたいところ。
<?php // validate1 var $validate = array( 'col1' => array( // 登録時のみ 'unique_create' => array( 'rule' => 'isUnique', 'message' => 'err', 'on' => 'create', ), // 更新時のみ 'unique_update' => array( 'rule' => 'isUniqueUpdate', 'message' => 'err', 'on' => 'update', ), ), ); // validate2 var $validate2 = array( 'col2' => array( // 登録時のみ 'unique_create' => array( 'rule' => 'isUnique', 'message' => 'err', 'on' => 'create', ), // 更新時のみ 'unique_update' => array( 'rule' => 'isUniqueUpdate', 'message' => 'err', 'on' => 'update', ), ), );
on => create,updateで登録時のみ、更新時のみに分けることが可能(パラメータにidが含まれるかどうかで区別している)。
バリデートを状況に応じて使い分けたい場合(例えばある状況ではcol2のみチェックしたいと言った場合)は、validate2と言った感じで別に定義してやればよい。
controllerでは以下のようにvalidateを上書きすればよい。
<?php $this->Model->validate = $this->Model->validate2; $this->Model->set($param); if (!$this->Model->validates()) { $error = $this->Model->invalidFields(); }
16/4/28追記
<?php //1回目のバリデート $this->Model->validate = $this->Model->validate; $this->Model->set($param); $this->Model->validates(); //2回目のバリデート $this->Model->validate = $this->Model->validate2; $this->Model->validates();
例えばこんな感じで複数パターンのバリデートを連続してやった場合。
1回目のバリデートが失敗してしまうと2回目のバリデートもそれを引き継いで必ずエラーになってしまう(2回目のvalidatesは成功していたとしても)。
なので以下のように2回目以降はcreateを入れてvalidatesをリセットさせてやる。
<?php //1回目のバリデート $this->Model->validate = $this->Model->validate; $this->Model->set($param); $this->Model->validates(); //2回目のバリデート $this->Model->validate = $this->Model->validate2; $this->Model->create(); // <-- 追加 $this->Model->set($param); // <-- 追加 $this->Model->validates();
insertの時といい、createというおまなじないを唱えないといけない。
最近始めたfxがなかなか好調です。メインはSBIFXトレード使ってます。
低予算(1000通貨)で比較 | FX比較 低予算から始めるFXランキング 初心者の外為入門