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

时间:2015-06-22 02:58:49

标签: yii2 rules active-form

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

这里是活动表格的屏幕截图..

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式定义规则(使用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,让浏览器在提交表单之前对其进行检查。

答案 1 :(得分:0)

您可以这样做:

$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';}")]