2016-10-22 81 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」形式from_rm場我還定義checkRm功能是這樣的:

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

但是,當我提交表單,我得到錯誤類checkRm不發現

現在請幫助如何在動態模型中使用自定義驗證。

我自己也嘗試whenwhenClient條件,但這些也沒有工作

回答

0

這個工作,如果checkRmDynamicModel類的方法。因此,要麼延長DynamicModel,並添加此方法或關閉,如:

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

試過這種..不工作 –

1

試試這個:

$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.'); 
}); 

編輯:

是的,它的工作原理。但是,如果您想用from_rm的空值進行測試,則需要將skipOnEmpty設置爲false。例如:

$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謝謝您的回答..但它也沒有工作對我來說..你試過了嗎? –