yii2如果选中复选框,则禁用规则

yii2如果选中复选框,则禁用规则,yii2,rules,active-form,Yii2,Rules,Active Form,在活动表单中,我有3个文本输入和一个复选框。 所有3个文本输入都有规则,表示不能为空。我想要的是,如果单击复选框,它将禁用规则并将空记录保存在数据库中 这是活动窗体的屏幕截图 您可以这样做: $model = new SomeForm(); if ($model->load(Yii::$app->request->post())){ if ($model->checkbox == true) $model->scenario = 'checked'; } // yo

在活动表单中,我有3个文本输入和一个复选框。 所有3个文本输入都有规则,表示不能为空。我想要的是,如果单击复选框,它将禁用规则并将空记录保存在数据库中

这是活动窗体的屏幕截图


您可以这样做:

$model = new SomeForm();
if ($model->load(Yii::$app->request->post())){
if ($model->checkbox == true) $model->scenario = 'checked';
}
// your model rules:
[['name', 'email', 'subject', 'body'], 'safe', 'on' => 'checked']
或者,您也可以这样做:

 if ($model->checkbox == true) $model->save(false); //this will disable any validation so be carefull
编辑: 如果需要cliend-side验证开关,则必须使用以下选项:

[['name', 'email', 'subject', 'body'], 'required', 'when' => function ($model) {
                return $model->cancelled == '0';
            }, 'whenClient' => new JsExpression("function (attribute, value) {  return $('#mailform-cancelled').val() == '0';}")]

您可以这样定义规则(使用):

公共功能规则()
{
返回[
['cancelled','boolean'],
['checkNumber','required'],
['Paye','required','when'=>函数($model){return!$model->cancelled;}],
['detacts'、'required'、'when'=>函数($model){return!$model->cancelled;}],
];
}

您可能还想添加一个选项,让浏览器在提交表单之前检查此选项。

您可以检查复选框状态,并相应地设置执行此操作的方案设置方案设置方案是什么意思?我该怎么做?意味着指定两种场景,例如1)选中2)凹口。选中复选框值后,将场景设置为chekced,反之亦然。如果复选框值未选中,则通过将场景设置为“未选中”,强制属性。否则,不要强迫他们。你现在明白了吗?我明白你的意思了。我已经可以确定它是否被选中了。。我只是不知道如何使用yii2规则来实现这一点。这似乎是在提交表单之后发生的。我希望浏览器先检查验证。你有什么想法吗?@nerison就是一个例子。我想你给了我正确的答案,但我正在使用,我无法指定复选框的ID。你对如何以动态的形式处理这个问题有什么想法吗?@nerison没有,不幸的是没有。我不确定它是否能用。