Chybová správa závislá na výsledku validácie
- mbskot
- Člen | 42
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)