Návrat originálních hodnot inputů po neúspěšné validaci
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Honza.Mottl
- Člen | 104
Používám ve formuláři desetinná čísla v českém formátu s čárkou a mezerou pro oddělení tisíců např. „123 456, 78“. Filtrem je převádím na anglický formát např. „123456.78“. V případě neúspěšné serverové validace se mi na klienta vracela fitrem přeformátovaná čísla v anglickém formátu. To není na klientu v pořádku a nevyhovuje to klientské validaci.
Jak se nejlépe vrátit k původním hodnotám před úpravou filtrem? Vyřešil jsem to návratem na originální hodnoty z postu v onError. Jak řešíte podobné problémy? Napadá vás něco lepšího?
public function formValidationFailed ($form) {
//
// - hodnoty se znovu vytvori z POSTu
//
foreach ($form->getComponents(TRUE, 'Nette\Forms\IControl') as $control) {
if (!$control->isOmitted())
{
$originalValue = $this->getHttpRequest()->getPost($control->name);
if (isset($originalValue)) {
$control->setValue($originalValue);
}
}
}
}
protected function createComponentEditForm()
{
...
$control = $form->addText($polozka[PolozkyManager::PRIPADPOL_COLUMN_ID] . self::ROW_SEPARATOR . 'sleva_proc', '')
->setAttribute('class', 'sleva_proc formatNumber')
->setAttribute('maxlength', '6')
->setAttribute('data-toggle', 'tooltip')
->setAttribute('title', 'Sleva %')
->addFilter(function ($value) {
return str_replace(' ', '', str_replace(',', '.', $value));
})
->addRule(Form::PATTERN, 'Sleva %: Nesprávný formát čísla.', '-?[0-9\s]*.?[0-9]{0,2}')
->addRule('App\Utilities\MyValidators::slevaProcValidator', 'Sleva musí být v rozsahu %d do %d procent', [-900, 100])
;
....
$form->onSuccess[] = [$this, 'editFormSucceeded'];
$form->onError[] = [$this, 'formValidationFailed'];
...
return $form;
}