2016-10-22 10 views
4

私はyii2基本アプリケーションで動的モデルを使用しています。Yii2のダイナミックモデルでカスタム検証機能を追加する方法は?

以下は私の動的モデルのコードです。

$model = new \yii\base\DynamicModel([ 
     'role', 'from_rm', 'to_rm', 'user1_subdistrcts' 
    ]); 
    $model->addRule(['user1_subdistrcts', 'role'], 'required', ['message' => "Please select this field."]) 
->addRule(['from_rm'], 'checkRm'); 

ここで私は私はこのようなcheckRm機能をも定義しているユーザーのカスタム検証関数「checkRm」形式from_rmフィールドに喜ん:

public function checkRm($from_rm, $params) 
{ 
    $this->addError($from_rm, 'Please Select Regional Manager.'); 
} 

しかし、私は、フォームを送信するとき、私はエラークラスcheckRmにはない取得見つかった

ダイナミックモデルでカスタム検証を使用する方法をお手伝いしてください。

私もwhenwhenClient条件を試してみましたが、それらはまた、checkRmDynamicModelクラスのメソッドである場合、これは動作します

答えて

0

に動作していません。これを試してみてください

...->addRule(['from_rm'], function ($attribute, $params) { 
    $this->addError($from_rm, 'Please Select Regional Manager.'); 
}); 
+0

が、これはあなたの答えのための –

1

:だから、どちらかDynamicModelを拡張し、このメソッドを追加するかのような閉鎖を使用

$model = new \yii\base\DynamicModel([ 
    'role', 'from_rm', 'to_rm', 'user1_subdistrcts' 
]); 
$model->addRule('from_rm', function ($attribute, $params) use ($model) { 
    $model->addError($attribute, 'Please Select Regional Manager.'); 
}); 

EDIT:

はい、それは動作します。しかし、from_rmの空の値でテストする場合は、skipOnEmptyfalseに設定する必要があります。例:

$model = new \yii\base\DynamicModel([ 
     'role', 'from_rm', 'to_rm', 'user1_subdistrcts' 
    ]); 
    $model->addRule('from_rm', function ($attribute, $params) use ($model) { 
     $model->addError($attribute, 'Please Select Regional Manager.'); 
    }, [ 
     'skipOnEmpty' => false, 
    ]); 

    $model->validate(); 
    var_dump($model->getErrors()); 
+0

こんにちはmat0ngのおかげで動作していない..しかし、それはまた、私のために働いていません..あなたはそれを試してみました。..しようとしましたか? –

関連する問題