Validační pravidlo ->addRule(callback()) pro více parametrů
- 2bfree
- Člen | 248
Zdravím,
mám ve formuláři dva parametry: ‚název‘ a ‚verze‘
chtěl bych přidat kontrolu, která v databázi ověří že taková kombinace
se nevyskytuje, s tím že by případně vrátila standardní chybu.
Našel jsem postup pro jeden parametr, ale nepřišel jsem na to, jak se v callback funkci dostat k ostatním parametrům.
- westrem
- Člen | 398
No problem je v tom, ze pomocou addRule
nastavujes pravidlo pre
jedno pole, nie pre viac.
Easy riesenie ale je nasledovne:
Kedze AppForm
je potomok FormContainer
ma
k dispozicii pole $onValidate
, tu pridaj tvoju validacnu funkciu
ako callback, pricom parametrom je cely formular.
V nej si pomocou getValues
vytiahnes hodnoty, ktore potrebujes
(nazev, verze), ocekuj voci DB a ak nieco nesedi tak nad formularom zavolaj
addError
a nastav $this->valid
na
FALSE
a mas hotovo.
Pre viac info vid API source code k FormContainer
- westrem
- Člen | 398
nAS napsal(a):
Každý prvek formuláře obsahuje odkaz na rodičovský formulář. Takže v tom callbacku pro jeden prvek si můžeš vytáhnout hodnoty všech ostatních prvků formuláře.
To je sice pravda ale toto riesenie postrada semantiku. Nalepus rule na jeden prvok a v callbacku kontrolujes X dalsich? A co ak niekde nieco zmenis, povies si ze ten callback uz nepotrebujes na tom prvku, odstranis ho a prides zrazu o kontrolu aj tych ostatnych prvkov?
- nAS
- Člen | 277
westrem napsal(a):
To je sice pravda ale toto riesenie postrada semantiku. Nalepus rule na jeden prvok a v callbacku kontrolujes X dalsich? A co ak niekde nieco zmenis, povies si ze ten callback uz nepotrebujes na tom prvku, odstranis ho a prides zrazu o kontrolu aj tych ostatnych prvkov?
Já neříkám, že to je univerzální řešení. Prostě je to další možnost, která v některých případech může mít smysl (např. kontroluji jednu položku, akorát ve výjimečném případě se potřebuji podívat na hodnotu jiné).
- westrem
- Člen | 398
Nilp napsal(a):
Osobně tyhle kontroly řeším až vyhazováním vyjímek z příslušné metody modelu, je zaručena transakční bezpečnost a je možné využít UNIQUE indexu.
Ano ano, tak som to myslel ale v tom zmysle, ze toto bude zaobalene v tom validacnom callbacku. Tam kde spominam, ze sa to „ocekuje voci DB“ je presne zahrnute to, ze to poslem modelom na DB a snazim sa odchytit exception s nejakou rozumnou hlaskou, ktoru potom v pripade potreby zobrazim pri formulari.
- 2bfree
- Člen | 248
westrem napsal(a):
No problem je v tom, ze pomocou
addRule
nastavujes pravidlo pre jedno pole, nie pre viac.Easy riesenie ale je nasledovne:
KedzeAppForm
je potomokFormContainer
ma k dispozicii pole$onValidate
, tu pridaj tvoju validacnu funkciu ako callback, pricom parametrom je cely formular.V nej si pomocou
getValues
vytiahnes hodnoty, ktore potrebujes (nazev, verze), ocekuj voci DB a ak nieco nesedi tak nad formularom zavolajaddError
a nastav$this->valid
naFALSE
a mas hotovo.Pre viac info vid API source code k FormContainer
To je přesně ro řešení co hledám. ;) Udělal jsem ty callback metody dal jsem do nich patřičné kontroly, ale i když to vrátí TRUE nebo FALSE, tak to na mě se*e jak na placatý kámen a klidně to směle projde. ;(