我在" Yii2 krajee FormBuilder"中创建了一个注册表单。它包含两个复选框。必须至少选择其中一个。验证必须在客户端进行,以免重载页面。如果Yii2包含将必需和 whenClient 分配给复选框的选项,那么一切都会很简单 - 遗憾的是,这是不可能的。对于其他字段(文本框,选择框,您可以使用此代码:
型号:
$public $module1;
$public $module2;
'module1'=>[
'type'=>Form::INPUT_CHECKBOX,
'name'=>'ak1',
'label'=>'<b>'.Yii::t('app','register.module1').'</b>' ],
'module2'=>[
'type'=>Form::INPUT_CHECKBOX,
'name'=>'ak2',
'label'=>'<b>'.Yii::t('app','register.module2').'</b>' ]
'textbox1'=>[
'type'=>Form::INPUT_TEXTBOX,
'name'=>'tx1',
'label'=>'<b>'.Yii::t('app','register.tx1').'</b>' ]
[...]
[[ 'textbox1', 'texbox2', ],'required','whenClient'=> "function (attribute, value) { return $('#registerform-textbox1').is(':checked') == false && $('#registerform-textbox2').is(':checked') == false;}"
],
它适用于..但对于texboxes。无法将Checbox分配给 required
我用过这个,但在这种情况下,重新加载页面
['module1',function ($attribute, $params) {
if ($this->module1 == 0 && $this->module2 == 0) {
$this->addError($attribute, 'you have to select at least one option');
}
}],
通常,复选框验证由此
执行public function rules ()
{
array ['checboxname', 'compare', 'compareValue' => true,
'message' => 'You must agree to the terms and conditions'],
...
}
但在这种情况下,您无法将规则比较与规则 whenClient 结合起来 - 它负责客户端的功能指定验证。 我该如何解决这个问题?
答案 0 :(得分:1)
我不太确定你在尝试什么,但我认为你会这样做:
['checkbox1', 'required', 'when' => function($model) {
return $model->checkbox2 == false;
}
],
['checkbox2', 'required', 'when' => function($model) {
return $model->checkbox1 == false;
}
],