Yii2: условная проверка не работает при повторной отправке - PullRequest
0 голосов
/ 07 января 2020

У меня включено условное поле проверки на стороне клиента - в основном containerPrice требуется, если значение переключателя isContainerInlcluded равно 1.

Правила проверки

public function rules()
{
    return [
            [['monthlyTakeawayOrders', 'isContainerIncluded'], 'required'],
            ['containerPrice', 'required', 'when' => function($model){
                return $model->isContainerIncluded;
                }, 'whenClient' => "function(attribute, value) {
                    return $('#pricingform-iscontainerincluded input:checked').val() == 1;
                }"
            ],
            [['monthlyTakeawayOrders', 'containerPrice'],'integer']

    ];
}

Форма

<?php $form = ActiveForm::begin(['id' => 'pricing-form']); ?>

                <?= $form->field($pricingForm, 'monthlyTakeawayOrders') ?>

                <?= $form->field($pricingForm, 'isContainerIncluded')->radioList([
                        0 => 'Option 0',
                        1 => 'Option 1'
                ]) ?>

                <?= $form->field($pricingForm, 'containerPrice') ?>

                <div class="form-group">
                    <?= Html::submitButton('Calculate', ['class' => 'btn btn-primary', 'name' => 'pricing-button']) ?>
                </div>

            <?php ActiveForm::end(); ?>

Действие обработки

public function actionPartners()
{

    $pricingForm = new PricingForm();

    // pricing calculation processing
    if ($pricingForm->load(Yii::$app->request->post())) {
        $rates = $pricingForm->calculatePrice();
        $shipping = $pricingForm->calculateShipping($rates['reducedRate']);
        $table = $pricingForm->buildTable($rates['reducedRate']);

        return \yii\helpers\Json::encode([
                'rates' => $rates,
                'shipping' => $shipping,
                'deposit' => PricingForm::REBOX_DEPOSIT,
                'table' => $table,
                'isContainerIncluded' => $pricingForm->isContainerIncluded
        ]);
    }

    // get content
    $products = ProductHelper::getProducts()->results;
    $cmsApi = PrismicHelper::initiate();
    $partnersHomepage = $cmsApi->getSingle('partners_homepage');

    return $this->render('partners', [
            'pricingForm' => $pricingForm,
            'partnersHomepage' => $partnersHomepage,
            'products' => $products,
    ]);
}

В большинстве случаев это работает просто отлично, но когда я отправляю форму с isContainerInlcluded на 0, затем переключите его на 1 и отправьте снова (без заполнения containerPrice), проверка не инициируется и форма отправлена, необходимо указать eventhough containerPrice.

Кроме того, после выполнения вышеуказанных шагов, если Я сосредотачиваюсь на поле containerPrice и затем отправляю сообщение об ошибке, но форма все равно отправляется.

Форма является своего рода калькулятором цен, и я отправляю ее через ajax, поэтому страница не обновляется sh выполняется после отправки, поскольку требуется, чтобы пользователь мог изменить свой ввод и повторно отправить форму снова, чтобы увидеть мгновенные результаты. * 102 2 *

Я не знаю, почему это происходит, поэтому любая помощь приветствуется. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...