5

ルールにシナリオを使う機会はないか迷っていたのですが、

私のモデルでは

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 には請求フィールドが含まれ、非表示には配送フィールドが含まれます。

フォームを送信したいのですが、チェックボックスが選択されていない場合、必須フィールドのために送信できません。そのため、シナリオを使用する機会はありますか?

ありがとう、私の質問を理解していただければ幸いです。

4

1 に答える 1

10

はい、可能です。コントローラーで、チェックボックスがオンになっているかどうかを確認してから、シナリオを設定できます。そんな感じ

  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'),

それで全部です。ものすごく単純。

于 2013-07-02T08:13:24.297 に答える