0

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

这是活动表单的屏幕截图..

在此处输入图像描述

4

2 回答 2

1

你可以这样做:

$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';}")]
于 2015-06-22T08:43:01.447 回答
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以让浏览器在提交表单之前对其进行检查。

于 2015-06-22T13:49:49.453 回答