2015-06-22 4 views
0

В активной форме у меня есть 3 текстовых и один флажок. Все три текстовых ввода имеют правила, которые не могут быть пустыми. Я хочу, чтобы этот флажок был нажат, Он отключит правила и сохранит пустую запись в базе данных.yii2 отключить правила, если установлен флажок

здесь снимок экрана активной формы ..

enter image description here

+0

Вы можете проверить статус флажка и соответственно установить сценарий для этого – Chinmay

+0

Что вы подразумеваете под установкой сценария? как это сделать? – beginner

+0

Средство указывает 2 сценария: 1) проверено 2) не проверено. Когда значение флажка отмечено, установите сценарий как chekced и наоборот. Когда значение флажка не отмечено, сделайте атрибуты обязательными, установив сценарий как «непроверенный». Иначе не делайте их принудительными. Вы поняли это сейчас? – Chinmay

ответ

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 в чтобы браузер мог проверить это, прежде чем он отправит форму.

+0

Как правильно использовать 'whenclient' ??? – beginner

+1

@nerison [Здесь] (http://www.yiiframework.com/doc-2.0/guide-input-validation.html#conditional-validation) является примером. – robsch

+0

Большое вам спасибо. – beginner

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 переключатель проверки на стороне, Вы должны использовать это:

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

Это похоже на то, что после отправки формы. Я хочу, чтобы браузер сначала проверил проверку. У вас есть идея? – beginner

Смежные вопросы