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
+
+1
-

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;
	}