Posílání form errors do flash messages
- daliborcaja
- Člen | 57
Potřeboval bych aby se chyby zjištěné při validaci AppForm na straně
serveru posílaly do flash messages a nevypisovali při renderování formu.
Nevíte někdo jak to vyřešit, nejlépe globálně pro celou APP.
Např mě napadlo že by to možná šlo vydolovat
v BasePresenter/startup Edit: BasePresenter/beforeRender
Editoval daliborcaja (13. 3. 2011 23:29)
- daliborcaja
- Člen | 57
No ajaxovou validaci jsem zrovna neměl na mysli ale je to zajímavá
myšlenka. Mi se jenalo pouze o to aby se ty chyby nevypsaly u formu a tím mi
rozhodily grafiku, ale aby se vypisovaly v místě pro to určeném a to tam
kde se vypisují flash messages.
Teď je otázka co je lepší, jestli předělat všechny formy na ajaxovou
validaci (což se mi zdá pro tuto konkrétní aplikaci zbytečné), nebo jen
v beforeRender načíst a unsetovat errors z formu.
Spíše mě tedy zajímalo jak v beforeRenderu přistoupit k tomu formu,
respektive zjistit že se jedná o request způsobený odesláním formuláře
a kterého. To že se případně ještě před beforeRender provede callback
formu mi nevadí, protože používám vždy onSubmit který se provede jen
když je form validní.
- daliborcaja
- Člen | 57
Nakonec si asi odpovím sám, okoukal jsem to z te ajaxové validace.
public function beforeRender() {
$post = $this->request->post;
if (isset($post['name'])) {
$control = $this[$post['name']];
// tady bude uz jenom predani tech errors z formu do flash messages a vymazani ve formu
}
}
Ještě to musím testnout.
- Šaman
- Člen | 2666
Vypisovat errory nemusíš vůbec, pokud používáš šablony pro
vykreslení formulářů. Teď jsem chtěl zkusit jestli půjde vypisovat chyby
do bloku flash
přímo v šabloně formuláře a zjistil jsem, že
při defaultním vykreslení bez šablony se input zvýrazní červeně a chyba
se vykreslí do bubliny k tomu inputu. Dokonce i s vypnutým JS. Zkus
upgradovat a možná už to nebudeš muset řešit.
- bojovyletoun
- Člen | 667
Napadá mě:
$form->onInvalidSubmit[]=function($form){
$form->getPresenter->flashMessage(var_export($form->errors,true));
$form->cleanErrors();
}
- daliborcaja
- Člen | 57
Šaman napsal(a):
Zkus upgradovat a možná už to nebudeš muset řešit.
Díky za tip, mám celkem starou verzi.
bojovyletoun napsal(a):
Napadá mě:
$form->onInvalidSubmit[]=function($form){...}
Více méně tak jsem to měl přesně na mysli ale na jiném místě, ale tohle bude asi lepší, jelikož si můžeš zvolit jestli to použít pro konkrétní form nebo ne. Akorát tu callback funkci do samostatné metody v basePresenter ať se to tam tisíckrát neopakuje.
- uestla
- Backer | 799
Chceš-li to globálně pro celou aplikaci, je nejlepší využít dědění:
class BaseForm extends AppForm
{
public function addError($message)
{
$this->valid = FALSE;
if ($message !== NULL) {
$this->getPresenter()->flashMessage($message, 'fail');
}
}
}
A místo AppForm
pak používat BaseForm…