在项目中的一个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>'
])