Chybová správa závislá na výsledku validácie

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

Zdravím,

robil som jeden klasický formulár, keď som narazil na jedno obmedzenie.

Formulár má vstupné pole currency a amount. Používateľ si môže vybrať menu a v danej mene zadať sumu.
Chcem, aby suma bola v určitom rozsahu (napr. od €1 do €1000). Nie je podstatné, akú menu si používateľ zvolí. Ak by si napr. vybral Českú korunu, chcem aby sa suma prepočítala na CZK. T.j. min je 27.40 CZK a max je 27400 CZK. Pochopiteľne chybová správa pre rôzne meny vyzerá rôzne.

Ukážkový kód:

<?php
	const MIN_AMOUNT = 1, MAX_AMOUNT = 1000; // in EUR

	$form->addSelect('currency', 'Currency', $currencies)
		->setRequired();

	$form->addText('amount', 'Amount')
		->setReuired()
		->addRule(function ($control)
		{
			$currency = $currencyDao->find($form['currency']->getValue());
			$value = $control->getValue() * $currency->getValueInEur();

			if ($value >= self::MIN_AMOUNT && $value <= self::MAX_AMOUNT)
			{
				$min = self::MIN_AMOUNT / $currency->getValueInEur();
				$max = self::MAX_AMOUNT / $currency->getValueInEur();

				$control->addError("The amount has to be in the range "
					. "{$currency->getSymbol()} {$min} - {$currency->getSymbol()} {$max}.");

				return FALSE;
			}

			return TRUE;
		});
?>

Problém je s chybovou správou. Nette predpokladá, že mu viem sformulovať text správy v čase vytvárania formulára, ale čo ak viem chybu až v momente, keď chyba nastane? Odpoveďou by asi bol event $form->onValidate, čo mi príde ako jediné (aktuálne) použiteľné riešenie, no čo ak chcem mať validáciu aj na strane klienta?

Iná možnosť by tu bola, keby sa dalo správu nevyžadovať v metóde addRule. Ono to tu už aj bolo lenže aktuálne to kazí toto a už to zase nefunguje.

Vie niekto poradiť, čo s tým?

Editoval mbskot (8. 6. 2015 10:32)