Yii2要求选择一个或多个复选框FormBuilder

时间:2014-10-25 10:51:42

标签: forms validation checkbox yii2

我在" 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 结合起来 - 它负责客户端的功能指定验证。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我不太确定你在尝试什么,但我认为你会这样做:

['checkbox1', 'required', 'when' => function($model) {
    return $model->checkbox2 == false;  
  }
],
['checkbox2', 'required', 'when' => function($model) {
    return $model->checkbox1 == false;  
  }
],