yii2中的验证器工作不正常时


When validator in yii2 not working properly

在项目中的一个view文件中,我使用when验证器为model定义一些验证,但它不能正常工作可能是因为我不知道如何使用该验证器。这是表格的型号代码

       return [
        [['event_id', 'user_id'], 'required'],
        [['event_id', 'user_id'], 'integer'],
        [['is_mandatory'], 'boolean'],
        [['answer'], 'string', 'max' => 250],
        [['answer'], 'required', 'when' => function($model){
            return $model->is_mandatory == 1; }]
    ];

这是我的view代码,是的,我在带有实例的视图文件上创建这个字段,因为创建这些字段取决于其他输入。

        $modelAnswers = new Answers();
        $modelAnswers->is_mandatory = 0;
        echo $form->field($modelAnswers, "answerswer",[
            'template' => ' <div class="row"><div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"><label>{label}</label></div><div class="col-lg-4 col-md-4 col-sm-6 col-xs-8">{input}{error}{hint}</div></div>'
        ])->textInput(['maxlength' => true]);

但它总是根据需要打印字段。我可以在调试器中看到$model被正确地分配了值。这里的验证器出了什么问题??

when()验证仅用于服务器端验证,并且仅在提交表单时进行评估。如果您想根据is_mandatory的值显示所需字段或不显示字段,则有两个选项。

首先,可以使用whenClient()方法添加客户端验证。这是我在自己的表单上使用的,涉及到编写一个javascript函数,该函数将确定字段是否是必需的,然后它将应用相关的类。要做到这一点,您需要在表单上的某个位置包含is_mandatory字段,可能是作为一个隐藏字段,并且需要在表单中启用clientValidation

其次,您可以简单地调整该字段的模板,以便除非is_mandatory设置为true,否则不会包含错误消息。这将涉及重写字段标签。

echo $form->field($modelAnswers, "answerswer",[
            'template' => ' <div class="row"><div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"><label class="{$modelAnswers->is_mandatory ? 'required' : ''}">Name of label here</label></div><div class="col-lg-4 col-md-4 col-sm-6 col-xs-8">{input}{error}{hint}</div></div>'
        ])