У меня включено условное поле проверки на стороне клиента - в основном 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 *
Я не знаю, почему это происходит, поэтому любая помощь приветствуется. Спасибо!