Validace formuláře přepíše původní form

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Fooly
Člen | 26
+
0
-

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.

David Matějka
Moderator | 6445
+
0
-

co myslis „globalni promennou“? muzes ukazat kod?

Fooly
Člen | 26
+
0
-

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)

Fooly
Člen | 26
+
0
-

Nedavno jsem mel jiny problem, u ktereho jsem se dozvedel, ze nette vytvari formular znovu aby mohl validovat, takze predpokladam, ze to je ten problem.

Fooly
Člen | 26
+
0
-

Porad ale nevim jak to resit, pokud nekdo vite tak ocenim jakykoli posun.