2015-02-27 16 views
6

Tôi cố gắng để sử dụng validator có điều kiện Yii2 của như được đưa ra trong hướng dẫn như:Yii2: Conditional Validator luôn trả về yêu cầu

đang Mẫu

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


    ]; 
} 

và trong điều khiển của tôi như:

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

Nhưng liệu tôi có chọn hay không trường đã thoát là trường hộp kiểm, thì ngày tháng xuất hiện trả về theo yêu cầu.

Tôi đang làm gì sai ở đây?

+1

Thêm các quy tắc xác thực còn lại, các tình huống (nếu chúng tồn tại) và mã điều khiển. – arogachev

+0

Hi arogachev - không có gợi ý nào trong tài liệu cho mã điều khiển để xác thực này, bạn có thể giải thích cách thực hiện điều đó không? – Pawan

+0

Tôi muốn đăng những gì bạn có vào lúc này. – arogachev

Trả lời

9

Cố gắng thêm enableClientValidation tham số như sau:

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

Dường như theo mặc định Yii2 sẽ làm xác nhận trong CẢ Server side và Client side. Kiểm tra ví dụ trong Conditional Validation phần của Yii2 doc:

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

bạn cũng cần một mã 'whenClient', hoặc như @Alexandr Bordun nói, để vô hiệu hóa xác nhận khách hàng bằng cách 'enableClientValidation' => false.

+0

Cảm ơn bạn đã đưa ra gợi ý :) – Elby

+0

Đây phải là câu trả lời được chấp nhận .. – Alex

1

tôi đã có yêu cầu tương tự như tôi giải quyết nó bằng cách sử dụng đoạn mã sau

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

câu trả lời giống như @Alexandr Bordun nhưng với một loại: ''whenClient'' phải là' 'khi''. Bạn không thể sử dụng một hàm PHP ở phía máy khách;) – TheStoryCoder

2

này chỉ làm việc cho tôi khi sử dụng tên mô hình (xác nhận khách hàng).

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

Nó làm việc cho tôi.

Các vấn đề liên quan