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

yii2 disable the rules if a checkbox is selected

在活动表单中,我有 3 个文本输入和 1 个复选框。 所有 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

编辑: 如果你需要客户端验证开关,你必须使用这个:

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

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

public function rules()
{
    return [            
        ['cancelled',   'boolean'],
        ['checkNumber', 'required'],
        ['payee',       'required', 'when' => function ($model) {return !$model->cancelled;}],
        ['particulars', 'required', 'when' => function ($model) {return !$model->cancelled;}],
    ];
}

您可能还想添加 whenClient 让浏览器在提交表单之前检查它。