ホーム > ブログ > CakePHP + unbindValidation
2009年03月26日

CakePHP + unbindValidation

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

これまでバリデーション対象から除外したいフィールドがあった場合どうやっていたかというと、
除外したいModelインスタンスのバリデーションルールを安直にunsetしてました。

これはつらい!

というわけで、今日からはunbindValidationを使用してインテリジェンスな開発をします。

情報元:
Simple Way to Unbind Validation & Set Remaining Rules to Required

使用方法です。

1.以下のメソッドを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をコールします。

例)Userモデルのmail、passwordフィールドを検証しない場合
$this->User->unbindValidation('remove',array('mail','password'),true);

例)Userモデルのmail、passwordフィールドのみ検証する場合
$this->User->unbindValidation('keep',array('mail','password'),true);

3.あとは通常通りにバリデーションを実行します。

詳細はSimple Way to Unbind Validation & Set Remaining Rules to Requiredを見てください。

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

コメントを投稿

名前:


メールアドレス:


サイトURL:


コメント: