Validace formuláře přepíše původní form
- Fooly
- Člen | 26
Zdravím, mám problém s formulářem.
Vytvářím formulář který se nějak chová na základě nasetované
globální proměnné ($parameterId)
pokud je parameterId vyplněn, tak se formulář vykreslí s jinýmy prvku než
pokud není.
Odeslání formuláře je ajaxem, a když formulář odešlu tak se $parameterId
odsetuje, a tudíž při validaci vzniká jiný formulář, validace proběhne,
ale odeslané values jsou prázdné z té druhé verze formuláře, v
$this->getHttpRequest->getPost() hodnoty jsou. Dá se tohle nějak
šikovně obejít? Validace formuláře se mi vypínat nechce.
Zkoušel jsem hned po zavolání metody na success znovu nastavit $parameterId,
ale to už je pozdě.
Možná kdybych to šoupnul do onValidate[] metody.
- Fooly
- Člen | 26
Kod je hrozne zaprasenej a ma 2000 radku, ale aspon ukazku bych snad mohl:
{
$parameterUnits = $this->parameterManager->getUnitsWithTranslates($this->parameterId);
$parameterValues = $this->parameterManager->getValuesWithTranslates($this->parameterId);
$form = new AdminForm();
$form->setTranslator($this->translator);
$form->addHidden('id');
$form->addHidden('removedIds');
$form->addHidden('product_id', $this->productId);
$form->addHidden('parameter_id', $this->parameterId);
$productId = $this->productId;
$parameterId = $this->parameterId;
$removeContainerClicked = $this->removeContainerClicked;
$this->payload->paramUnits = empty($parameterUnits);
$this->payload->paramValues = empty($parameterValues);
if (!empty($parameterUnits) && !empty($parameterValues)) {
$this->payload->test1 = true;
$form->addDynamic('parameters', function (Container $container) use ($parameterUnits, $parameterValues, $productId, $parameterId, $removeContainerClicked) {
$container->addHidden('id');
$container->addSelect('value_parameter_id', $this->translator->translate('admin.product.fillParametersForm.valueParameterId'), $parameterValues)->setTranslator(null);
$container->addText('unit_value', 'admin.product.fillParametersForm.unitValue');
$container->addSelect('unit_parameter_id', $this->translator->translate('admin.product.fillParametersForm.unitParameterId'), $parameterUnits)->setTranslator(null);
$container->addSubmit('remove', 'admin.product.fillParametersForm.removeContainer')
->setValidationScope(false)// disables validation
->onClick[] = $removeContainerClicked;
}, self::DEFAULT_PARAMETERS_COUNT_CASE_3);
$form->addSubmit('add', 'admin.product.fillParametersForm.addContainer')
->setValidationScope(false)// disables validation
->onClick[] = $this->addContainerClicked;
} elseif (count($parameterUnits) > 0) {
$form->addText('unit_value', 'admin.product.fillParametersForm.unitValue');
$form->addSelect('unit_parameter_id', $this->translator->translate('admin.product.fillParametersForm.unitParameterId'), $parameterUnits)->setTranslator(null);
} elseif (count($parameterValues) > 0) {
$form->addSelect('value_parameter_id', $this->translator->translate('admin.product.fillParametersForm.valueParameterId'), $parameterValues)->setTranslator(null);
}
$form->addSubmit('submit', 'admin.product.addParametersForm.submit')
->setAttribute('id', 'submitFillParametersForm')
->setAttribute('class', 'ajax');
$form->onSuccess[] = $this->fillParametersFormSucceeded;
return $form;
} \--
promenna $this->parameterId se nastavi pokud kliknu na tlacitko pridat parametr, coz je handle kterej zaroven otevre modal s timhle formularem pri validaci uz ale $this->parameterId nastaveny neni, proto se vytvori formular v te prvni podmince
Editoval Fooly (29. 6. 2015 12:36)