Validační pravidlo ->addRule(callback()) pro více parametrů

- 2bfree
 - Člen | 252
 
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 | 252
 
westrem napsal(a):
No problem je v tom, ze pomocou
addRulenastavujes pravidlo pre jedno pole, nie pre viac.Easy riesenie ale je nasledovne:
KedzeAppFormje potomokFormContainerma k dispozicii pole$onValidate, tu pridaj tvoju validacnu funkciu ako callback, pricom parametrom je cely formular.V nej si pomocou
getValuesvytiahnes hodnoty, ktore potrebujes (nazev, verze), ocekuj voci DB a ak nieco nesedi tak nad formularom zavolajaddErrora nastav$this->validnaFALSEa 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. ;(