可以在Yii2中使用带有DynamicModel的存在验证器

时间:2016-01-04 17:50:49

标签: validation model yii2

我需要针对数据库验证用户输入,如果输入存在,则该字段应该是验证。我以这种方式创建了一个动态模型:

exist

并添加了下一个$modelDynamic->addRule('TIN','exist',[ 'targetClass'=>'frontend\modules\profiles\models\PorfBusiness', 'targetAttribute'=>'TIN', 'skipOnEmpty'=>true ])->validate(); 规则验证程序:

if (isset($modelDynamic)) {

                $formDynamic = ActiveForm::begin([
                'type'=>ActiveForm::TYPE_HORIZONTAL,
                'formConfig'=>[],
                ]);
                echo $formDynamic->errorSummary($modelDynamic);

                echo $formDynamic->field($modelDynamic,'TIN')
                    ->textInput()
                    ->label(Yii::t('app','TIN'));

                echo $formDynamic->field($modelDynamic,'Business_Code')
                    ->textInput()
                    ->label(Yii::t('app','Business Code'));

                echo HTML::submitButton('Submit');

                ActiveForm::end();
            }

所有这些都在我的控制器ProfPersonController中。

在名为profile的视图中创建此表单:

 d = {('08', '10010'):6, ('23', '10017'):6,('06444', '10028'): 6,('21', '10027'): 6}

Image with a wrong code

(错误的代码)

验证没有任何效果,输入也不正确,也不正确。没有错误摘要也没有发出。 有错误吗?任何的想法?提前谢谢。

1 个答案:

答案 0 :(得分:0)

将控制器代码更改为

 $modelDynamic= new DynamicModel(['TIN','Business_Code']);

    $modelDynamic->addRule('TIN','exist',[
        'targetClass'=>'frontend\modules\profiles\models\PorfBusiness',
        'targetAttribute'=>'TIN',
        'skipOnEmpty' => true
    ]);

  if($modelDynamic->load(Yii::$app->request->post())&& $modelDynamic->validate()){
            //Model is Validated and ready to go throgh        
    }

您必须在load()

DynamicModel后验证()您的模型