ホーム > ブログ > [CakePHP] バリデーションの設定を動的にコントロールする

[CakePHP] バリデーションの設定を動的にコントロールする

unbindValidationを使用するとModelのバリデーションを動的にコントロールできます。

情報元

使用方法です。

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を見てください。
前の記事 «
次の記事 »