2013-07-02 44 views
5

tôi đã lang thang là có bất kỳ cơ hội để sử dụng kịch bản cho các quy tắc,kịch bản cho các quy tắc xác nhận trong yii

trong mô hình của tôi, tôi có

public function rules() 
{ 
    return array(
     array('delivery, firstNameBilling, lastNameBilling, addressBilling, cityBilling, countryBilling, 
      postBilling, telephoneBilling, mailBilling, firstNameDelivery, lastNameDelivery, addressDelivery, 
      cityDelivery, countryDelivery, postDelivery, telephoneDelivery, mailDelivery', 'required'), 
     array('active', 'numerical', 'integerOnly'=>true), 
    ); 
} 

và theo quan điểm của tôi, tôi có một cái gì đó giống như

này
<tr> 
     <td> 
      <p><?php echo $form->label($model,'telephoneBilling'); ?><span>:&nbsp;</span><span class="required">*</span></p> 
     </td> 
     <td> 
      <?php echo $form->textField($model,'telephoneBilling'); ?> 
      <?php echo $form->error($model,'telephoneBilling'); ?> 
     </td> 
    </tr> 
</table> 

<p><?php echo $form->checkBox($model,'active', array('class' => 'change')); ?> 
    Delivery information: Please check the box if your delivery address differs from your billing address and enter the 
    required delivery address in the fields provided below.</p> 

    <div id="deliveryFormWrapper" style="display: none"> 
    <table class="cartReviewTable"> 
    <tr> 
     <td colspan="4"> 
      <span class="blueTitle"><?php echo CHtml::encode(Yii::t('app', 'Delivery Information ')); ?></span> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <p><?php echo $form->label($model,'firstNameDelivery'); ?><span>:&nbsp;</span><span class="required">*</span></p> 
     </td> 
     <td> 
      <?php echo $form->textField($model,'firstNameDelivery'); ?> 
      <?php echo $form->error($model,'firstNameDelivery'); ?> 
     </td> 

Đây chỉ là một phần để cung cấp cho bạn hình ảnh tôi làm, vì vậy khi tôi nhấp vào hộp kiểm tôi hiển thị div ẩn này và anh ấy có quy tắc cho trường của mình (div đầu tiên chứa trường Thanh toán và ẩn ns trường phân phối.

Khi tôi muốn gửi biểu mẫu và hộp kiểm không được chọn, tôi không thể làm điều đó, vì các trường bắt buộc, vì vậy tôi đang lang thang Có cơ hội sử dụng kịch bản cho tình huống đó không và làm cách nào, tôi cần một đầu mối .

Cảm ơn, tôi hy vọng bạn có thể hiểu câu hỏi của tôi.

+0

http://www.yiiframework.com/wiki/266/understanding-scenarios/ –

Trả lời

10

Có thể. Trong bộ điều khiển của bạn, bạn có thể kiểm tra nếu hộp kiểm được chọn hoặc không, sau đó đặt kịch bản. Một cái gì đó như thế

if($_POST['my_checbox']==1) 
    $model->setscenario('checked'); 

Sau đó chỉ cần làm $model->validate() để kiểm tra lỗi. Trong quy tắc mô hình của bạn chỉ thiết lập xác nhận cho các kịch bản bạn có:

array('delivery, firstNameBilling, lastNameBilling, addressBilling, cityBilling, countryBilling, 
      postBilling, telephoneBilling, mailBilling, firstNameDelivery, lastNameDelivery, addressDelivery, 
      cityDelivery, countryDelivery, postDelivery, telephoneDelivery, mailDelivery', 'required','on'=>'checked'), 

Thats tất cả. Khá đơn giản.

+0

Cảm ơn ineersa, bạn đã giúp tôi rất nhiều :) –

+0

Tốt ví dụ về scenarions sử dụng trường hợp –

+0

ảnh vui nhộn. Trường hợp sử dụng tốt :) –