CakePHP備忘録2

【CakePHP1.3.2】

$this->Model->save()以外のタイミングでバリデーションしたい場合

validates()で検証し、エラーがあれば、メッセージを
invalidFields()で取り出す。

【コントローラ】
if(!empty($this->data)){
//モデルのインスタンスにデータをセットする
$this->Model->set($this->data);
if($this->Model->validates()){
//-------------------------
//バリデーション成功
//-------------------------
//すでにバリデーションは済んでいるので、
//save()の第2引数はfalseとする。
$this->Model->save($this->data, false);

} else {
//-------------------------
//バリデーション失敗
//-------------------------
$errors = $this->Model->invalidFields();
$error_msg = '';
foreach($errors as $error){
$error_msg .= $error . "<br />";
}
$this->Session->setFlash($error_msg);
}
}

バリデーションで、2つのフィールドの値が一致しているかどうかを確認する処理

検証中のフィールド名は、『独自バリデーションの第1引数['フィールド名']』で、
他のフィールド名は、『$this->data['モデル']['フィールド名']』で取得できる。

【モデル】
//パスワードの値(password)と、
//確認用パスワードの値(confirm)とを比較する
var $validate = array(
'password' => array(
'rule' => array('correspond'),
'message' => '確認用のパスワードと一致していません。'
)
);

//2つのパスワードの一致をチェック
function correspond($check){
return ($check['password'] == $this->data['Model']['confirm']);
}

バリデーションで、一意の値かどうかを確認する処理

普通は『'rule'=>'isUnique'』とするが、
下記のようにすれば、別のフィールドの値と比べることができる。

var $validate = array(
'mail_tmporary' => array(
array(
'rule' => array('mailCheck'),
'message' => 'このアドレスは既に登録されています。'
)
)
);

//仮登録したアドレスが、既に登録されていないかをチェック
function mailCheck($check){
return $this->isUnique(array('mail' => $check['mail_temporary']));
}

※引数の配列は、[調べたいフィールド名]=>[調べたいデータ]となっている。