如果选中复选框,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 让浏览器在提交表单之前检查它。
在活动表单中,我有 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 让浏览器在提交表单之前检查它。