сценарий правил проверки в yii

Я бродил, есть ли шанс использовать сценарий для правил,

в моей модели есть

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

а по-моему у меня что-то вроде этого

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

Это всего лишь часть, чтобы дать вам представление о том, что я делаю, поэтому, когда я нажимаю на флажок, я показываю этот скрытый div, и у него есть правила для его полей (первый div содержит поля для выставления счетов, а скрытый содержит поля доставки.

Когда я хочу отправить форму, а флажок не установлен, я не могу этого сделать из-за обязательных полей, поэтому я блуждал. Есть ли шанс использовать сценарий для этой ситуации и как, мне нужна подсказка.

Спасибо, надеюсь, вы понимаете мой вопрос.


person Ime Prezime    schedule 02.07.2013    source источник
comment
yiiframework.com/wiki/266/understanding-scenarios   -  person    schedule 02.07.2013


Ответы (1)


Да, это возможно. В вашем контроллере вы можете проверить, установлен ли флажок или нет, а затем установить сценарий. Что-то такое

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

Затем просто выполните $model->validate(), чтобы проверить наличие ошибок. В правилах вашей модели просто установите валидаторы для сценариев, которые у вас есть:

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

Это все. Довольно просто.

person ineersa    schedule 02.07.2013
comment
Спасибо, Инирса, ты мне очень помогла :) - person Ime Prezime; 02.07.2013
comment
Хороший пример сценария использования - person ; 02.07.2013
comment
Потрясающий. Хороший вариант использования :) - person Arvind Bhardwaj; 09.04.2015