2015-02-27 5 views
6

Sto cercando di usare validatore condizionale di Yii2 come indicato nella guida come:Yii2: condizionale Validator sempre rendimenti richiesti

Codice modello

public function rules() 
{ 
    // $discharged = function($model) { return $this->discharged == 1; }; 
    return [ 
     [[ 'admission_date','discharge_date', 'doctor_appointment_date', 'operation_date'], 'safe'], 
     [[ 'package','tpa_name', 'discharged', 'bed_type', 'room_category', 'ref_doctor', 'consultant_doctor', 'operation_name'], 'integer'], 
     [['advance_amount', 'operation_charges'], 'number'], 
     [['patient_name', 'ref_doctor_other'], 'string', 'max' => 50], 
     [['general_regn_no', 'ipd_patient_id'], 'string', 'max' => 20], 
     [['admission_date', 'discharge_date', 'doctor_appointment_date', 'operation_date'],'default','value'=>null], 
     ['ipd_patient_id', 'unique'], 

     [['bed_type','admission_date','room_category'],'required'], 

     ['discharge_date', 'required', 'when' => function($model) { 
      return $model->discharged == 1; 
     }], 


    ]; 
} 

e nel mio controller come:

public function actionCreate() 
    { 
     $model = new PatientDetail();  

     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 

Ma se seleziono o meno il campo scaricato che è un campo checkbox, la data di scarico alwasys ritorna come richiesto.

Cosa sto facendo male qui?

+1

Aggiungere le restanti regole di convalida, gli scenari (se presenti) e il codice del controller. – arogachev

+0

Ciao arogacev: non c'è alcun suggerimento nei documenti per il codice del controller per questa convalida, puoi approfondire come farlo? – Pawan

+0

Voglio dire post ciò che hai in questo momento. – arogachev

risposta

9

tenta di aggiungere enableClientValidation parametro come il seguente:

['discharge_date', 'required', 'when' => function($model) { 
     return $model->discharged == 1; 
}, 'enableClientValidation' => false] 
21

Sembra che per default Yii2 farà convalida in entrambi i lati laterali e Client Server. Controllare l'esempio nella Conditional Validation parte di Yii2 doc:

['state', 'required', 'when' => function ($model) { 
    return $model->country == 'USA'; 
}, 'whenClient' => "function (attribute, value) { 
    return $('#country').val() == 'USA'; 
}"], 

è necessario anche un codice di 'whenClient', o come ha detto @Alexandr Bordun, per disabilitare la validazione client 'enableClientValidation' => false.

+0

Grazie per dare il suggerimento :) – Elby

+0

Questa dovrebbe essere la risposta accettata .. – Alex

1

ho avuto il requisito simile Ho risolto utilizzando il seguente codice

['discharge_date', 'required', 'whenClient' => function($model) { 
     return $model->discharged == 1; 
}, 'enableClientValidation' => false] 
+0

stessa risposta di @Alexandr Bordun ma con un tipo: ''whenClient'' dovrebbe essere'' when''. Non è possibile utilizzare una funzione PHP sul lato client;) – TheStoryCoder

2

Questo ha funzionato solo per me quando si utilizza il nome del modello (validazione client).

['state', 'required', 'when' => function ($model) { 
 
    return $model->country == 'USA'; 
 
}, 'whenClient' => "function (attribute, value) { 
 
    return $('#MODELNAMEHERE-country').val() == 'USA'; 
 
}"]

1
['package_id_fk', 'required', 'when' => function($model) {return $model->type == 'PACKAGE';}, 'enableClientValidation' => false], 

funziona per me.

Problemi correlati