2015-02-27 4 views
6

I Yii2 die bedingten Validator zu verwenden versuchen, wie in der Anleitung gegeben, wie:Yii2: Bedingte Validator gibt immer erforderlich

Modellcode

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; 
     }], 


    ]; 
} 

und in meinem Controller wie:

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, 
      ]); 
     } 
    } 

Aber ob ich das entladene Feld, das ein Kontrollkästchenfeld ist, auswähle oder nicht, wird das Entlassungsdatum immer wie gewünscht zurückgegeben.

Was mache ich hier falsch?

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

Fügen Sie die Restvalidierungsregeln, Szenarien (falls vorhanden) und Controllercode hinzu. – arogachev

+0

Hallo arogachev - es gibt keinen Hinweis in der Dokumentation für den Controller-Code für diese Validierung, können Sie erläutern, wie das geht? – Pawan

+0

Ich meine Post, was Sie in diesem Moment haben. – arogachev

Antwort

9

Try enableClientValidation Parameter wie folgt hinzuzufügen. Überprüfen Sie das Beispiel in Conditional Validation Teil Yii2 doc:

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

Sie benötigen einen 'whenClient'-Code oder als @Alexandr Bordun sagte, um die Client-Validierung zu deaktivieren, indem 'enableClientValidation' => false.

21

Es scheint, dass Yii2 standardmäßig tun Validierung in BEIDE Server-Seite und Client-Seite:

+0

Danke für den Hinweis :) – Elby

+0

Dies sollte die akzeptierte Antwort sein .. – Alex

1

Ich hatte die ähnliche Anforderung ich es mit dem folgenden Code gelöst

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

gleiche Antwort wie @Alexandr Bordun aber mit einem Typ: ''whenClient'' sollte'' when'' sein. Sie können keine PHP-Funktion auf der Client-Seite verwenden;) – TheStoryCoder

2

Dies nur für mich gearbeitet, wenn den Modellnamen (Client-Validierung) verwendet wird.

['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], 

Es funktioniert für mich.

Verwandte Themen