[CakePHP] バリデーションの設定を動的にコントロールする
unbindValidationを使用するとModelのバリデーションを動的にコントロールできます。
情報元
使用方法です。
例)Userモデルのmail、passwordフィールドを検証しない場合
例)Userモデルのmail、passwordフィールドのみ検証する場合
あとは通常通りにバリデーションを実行します。
詳細はSimple Way to Unbind Validation & Set Remaining Rules to Requiredを見てください。
情報元
使用方法です。
1.unbindValidationメソッドをapp_model.phpに追加
function unbindValidation($type, $fields, $require=false)
{
if ($type === 'remove')
{
$this->validate = array_diff_key($this->validate, array_flip($fields));
}
else
if ($type === 'keep')
{
$this->validate = array_intersect_key($this->validate, array_flip($fields));
}
if ($require === true)
{
foreach ($this->validate as $field=>$rules)
{
if (is_array($rules))
{
$rule = key($rules);
$this->validate[$field][$rule]['required'] = true;
}
else
{
$ruleName = (ctype_alpha($rules)) ? $rules : 'required';
$this->validate[$field] = array($ruleName=>array('rule'=>$rules,'required'=>true));
}
}
}
}
2.unbindValidationメソッドをコール
バリデーション実行前にunbindValidationをコールして、バリデーションの設定を動的に変更します。例)Userモデルのmail、passwordフィールドを検証しない場合
$this->User->unbindValidation('remove',array('mail','password'),true);
例)Userモデルのmail、passwordフィールドのみ検証する場合
$this->User->unbindValidation('keep',array('mail','password'),true);
あとは通常通りにバリデーションを実行します。
詳細はSimple Way to Unbind Validation & Set Remaining Rules to Requiredを見てください。
次の記事 » [PHP] 生年月日(西暦)から年齢を割り出す簡単な方法