在活动表单中,我有3个textinput和一个复选框。 所有3个textinput都有不能为空的规则。我想要的是如果单击该复选框,它将禁用规则并将空记录保存在数据库中。
这里是活动表格的屏幕截图..
答案 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';}")]