AddFilter ve formuláři už není dostupný?
- webdata
- Člen | 153
Koukám že ve verzi 2.2.7 neni možnost u prvku formuláře přidat addFilter. Teda je možnost ale je jako deprecated.
.
.
$form->addText('name', 'Jméno', NULL, 64)
->addFilter('strtolower');
.
.
Ani jsem si nevšiml od jaké verze to tam není a čím to nahradit.
Editoval webdata (26. 1. 2015 15:46)
- jan.reges
- Člen | 10
Taky jsem na to právě narazil a koukám, že to již v následující verzi 2.3.0 začne vyhazovat i E_USER_DEPRECATED (https://github.com/…5cedfe24485d)
Metodu addFilter() používáme poměrně často na místech, kde nechceme být na zadávání hodnot/formátu tak striktní (kvůli UX), ale do DB chceme uložit data v jednotném formátu (příkladem je např. možnost zadat cenu formátem „1.23“ i „1,23“, ukládat všechny e-mailové adresy lowercase, atd.)
Jde to samozřejmě řešit i na úrovni handleru a zpracování jednotlivých hodnot. Bylo ale fajn, že jsem již na úrovni deklarace prvků mohl nastavit, jak chci hodnoty naformátovat/doladit, když přešli validací.
- David Grudl
- Nette Core | 8282
V podstatě stačí nahradit addFilter za addRule:
$form->addText('name', 'Jméno', NULL, 64)
->addRule(function($control) {
$control->setValue( strtolower($control->getValue()) );
return TRUE;
});
Výhodou je, že pak lze filtr zařadit kamkoliv, do větví atd. Složitější zápis se dá řešit pomocnou fcí:
class Helpers
{
static function filter($callback)
{
return function($control) use ($callback) {
$control->setValue( $callback($control->getValue()) );
return TRUE;
};
}
a pak použít
$form->addText('name', 'Jméno', NULL, 64)
->addRule(Helpers::filter('strtolower'));
- Tomáš Votruba
- Moderator | 1114
Zneužití addRule
ke změně hodnoty je opravdu velmi
neintuitivní.
Metodu addFilter
používáme stejně jako @jan.reges.
Pro nezasvěcené programátory bude addRule
u polí, kde může
být zadáno cokoliv, zbytečně WTF.
- jan.reges
- Člen | 10
Davide, děkuji za hint.
Intuitivní to není a u metody na nastavování validace bych modifikace hodnoty něcekal a už vůbec ne, že můžu předávat 2 druhy callbacků – jeden pro vlastní validační pravidlo a druhý pro modifikaci hodnoty.
Praktické důvody ale chápu a budu to tak používat.
- David Grudl
- Nette Core | 8282
Odstranil jsem deprecated message, s tím, že se to bude řešit při validaci. https://github.com/…127b4db38c9f
- David Grudl
- Nette Core | 8282
Btw, teď to jde dávat i do podmínek https://github.com/…oadData.phpt#…