如何在 yii2 中检查 OR 条件的验证?

How to check validation in OR conditions in yii2?

提问人:Rahman 提问时间:9/5/2018 最后编辑:Rahman 更新时间:9/5/2018 访问量:518

问:

我有两个单选按钮和两个 textInput: 和我的表单。用户应选择第一个单选单,然后填写 personID textInput 或选择第二个单选单选单,然后 textInput 将启用并可以填充 .同时只有一个选择,填写其中一个是必要的。personIDotherPersonotherPersonotherPerson

如何在客户端检查所需的验证?如果启用了第一个无线电,则为必要,否则。我尝试过遵循代码,但它不起作用。personIDotherPerson

 ['personID', 'required', 'when' => function ($model) {
        return $model->rdPerson== 0;
    }, 'whenClient' => "function (attribute, value) {
        return $('input[name=rdPerson]').val()==0;
    }"]

 ['otherPerson', 'required', 'when' => function ($model) {
            return $model->rdPerson== 1;
        }, 'whenClient' => "function (attribute, value) {
            return $('input[name=rdPerson]').val()==1;
        }"]

如何解决这个问题?

我的表格:

<?= $form->field($model, 'rdPerson')->radio(['name' => 'rdPerson', 'value' => 0]); ?>
<?php echo $form->field($model, 'personID')->textInput(); ?>


<?= $form->field($model, 'rdPerson')->radio(['name' => 'rdPerson', 'value' => 1])?>
<?php echo $form->field($model, 'otherPerson')->textInput(); ?>
验证 yii2 客户端

评论

0赞 Insane Skull 9/5/2018
代码看起来没问题。如果可能的话,您需要形成并替换为。enableAjaxValidationinput[name=radio]input_id
0赞 Muhammad Omer Aslam 9/5/2018
您能否在创建输入和单选按钮的位置添加表单代码?
0赞 Rahman 9/5/2018
@Muhammad Omer Aslam 我已经编辑了我的帖子并添加了您需要的内容。
0赞 Muhammad Omer Aslam 9/5/2018
添加了一个答案,看看是否有帮助

答:

1赞 Muhammad Omer Aslam 9/5/2018 #1

您需要对表单字段和您在 中使用的脚本进行一些更改,不要手动提供输入名称,因为它们是由自动生成的,将您的字段定义更改为使用分组单选按钮,这意味着而不是使用或使用数组名称来对它们进行分组,例如 .因为否则,您使用它的方式,每当您为字段或 触发 时,它总是会检索第一个单选按钮,因此将不起作用。whenClientActiveFormname='rdPerson'$form->field($model,'rdPerson')$form->field($model,'rdPerson[]')whenClientpersonIdotherPerson

此外,在内部,您应该检查单选按钮的值,而不是直接访问,以便检索单选按钮的值。whenClient:checked.val()checked

将表单字段更改为

<?= $form->field($model, 'rdPerson[]')->radio(['value' => 0,'uncheck'=>null]); ?>
<?php echo $form->field($model, 'personID')->textInput(); ?>


<?= $form->field($model, 'rdPerson[]')->radio(['value' => 1,'uncheck'=>null]) ?>
<?php echo $form->field($model, 'otherPerson')->textInput(); ?>

并将模型规则更新如下

[['personID'], 'required', 'when' => function($model, $attribute) {
        return $model->rdPerson == 0;
    },
    'whenClient' => 'function(attribute,value){ return ($("input[name=\''.\yii\helpers\Html::getInputName($this, 'rdPerson[]').'\']:checked").val()==0)}'],
[['otherPerson'], 'required', 'when' => function($model, $attribute) {
        return $model->rdPerson == 1;                    
    }, 'whenClient' => 'function(attribute,value){ return ($("input[name=\''.\yii\helpers\Html::getInputName($this,'rdPerson[]').'\']:checked").val()==1)}'],

希望这对你有所帮助。