2013-07-02 14 views
5

Chodziłam tam jest jakaś szansa, aby korzystać scenariusz dla reguł,scenariusz dla reguł walidacyjnych w Yii

w moim modelu mam

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

i moim zdaniem mam coś takiego

<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> 

To tylko część, która daje obraz, co robię, więc po kliknięciu na pole wyboru pokazuję ukryty element div, a on ma reguły dla swoich pól (pierwszy element div zawiera pola rozliczeniowe i ukryty element ns pola dostawy.

Kiedy chcę przesłać formularz i pole wyboru nie jest zaznaczone, nie mogę tego zrobić, ponieważ wymagane pola, więc wędrowałem Czy jest jakaś szansa na wykorzystanie scenariusza dla tej sytuacji i jak, potrzebuję wskazówkę .

Dzięki, mam nadzieję, że rozumiesz moje pytanie.

+0

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

Odpowiedz

10

Tak, jest to możliwe. W kontrolerze możesz sprawdzić, czy pole wyboru jest zaznaczone, czy nie, a następnie ustawić scenariusz. Coś w tym

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

Następnie wystarczy zrobić $model->validate() do sprawdzania błędów. W regułach model tylko zbiór validators dla scenariuszy masz:

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

to wszystko. Dość proste.

+0

Dzięki ineersa, bardzo mi pomogłeś :) –

+0

Dobry przykład scenariuszy użycia przypadku –

+0

Awesome. Przyjemny przypadek użycia :) –