jiné action a zpracování formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ajda2
Člen | 66
+
0
-

Zdravím,
prosím o radu. Mám komponentu vyhledávání s formulářem. Tu vytvářím v BasePresenteru, protože ji chci mít na všech stránkách. Problém ale je, že chci formulář zpracovat v jiném modulu.
Nevím jak nastavit správně action u formuláře a metodu onSuccess tak, abych formulář mohl zpracovat až v modulu.
Zkoušel jsem nastavit do action

<?php
$form->setAction(':Front:MujModul:Presenter');
a
$form->setAction($this->presenter->link('...'));
?>

Ale ani jedno nefunguje.

ajda2
Člen | 66
+
0
-

Tak action už jsem nastavil Funguje to, když nastavím Formuláři rodiče rodič

<?php
$form = new Form($this, $name);
?>

Ještě prosím, nevíte někdo, jak nastavit callback formuláře na jiný presenter?

<?php
$form->onSuccess[] = callback('FrontModule\SearchModule\HomepagePresenter', 'searchFormSuccess');
?>

Takto mi callback nefunguje…

Editoval ajda2 (29. 1. 2013 15:07)

enumag
Člen | 2118
+
0
-

Tohle by mne též zajímalo, nedokázal jsem to uspokojivě vyřešit. Jen hackem, který raději nechci ani ukazovat. :-D

ajda2
Člen | 66
+
0
-

Zatím jsem to obešel tak, že si formulářová data vytáhnu ručně z Nette\Http\Request, ale to mi přijde opravdu jako nouzové řešení.
Prosím kohokoliv o radu. Podle mě, je to jen věc správně nastavení callbacku. Případně, jak získám instanci požadovaného presenteru? Je ho ruční vytvoření nefunguje…

<?php
new Presenter`; // nefunkcni
?>
enumag
Člen | 2118
+
0
-

No… podle mne je to spíše otázka správného nastavení atributu action toho formuláře. Problém je, že potřebuju volat signál (submit) a současně změnit presenter což Nette neumí.

castamir
Člen | 629
+
0
-

Já spíš nechápu, proč bys to měl vůbec přesměrovávat na jiný presenter. Metoda setAction je tam podle mého názoru kvůli zpracování mimo nette aplikaci. Je tedy nějaký rozumný argument, proč mít definici komponenty formuláře v jednom presenteru a callback v druhém?

enumag
Člen | 2118
+
0
-

@castamir: To je jednoduché. Potřeboval jsem přihlašovací formulář zobrazit někde v hlavičce na všech stránkách. Problém je, že grafický návrh už nedovoloval aby tam byly i případné chyby (špatné heslo), prostě tam nebylo dost místa. Bylo tedy potřeba aby to fungovalo tím způsobem, že přihlašovací formulář se zpracovával vždy na konkrétní stránce „Sign:in“, kde byl tentýž formulář, ale umístěn v obsahovém bloku místo hlavičky takže už bylo dost místa na zobrazení chybových hlášek. Vzhledem k tomu že bylo nutné změnit jednak layout a druhak URL nebyla jiná možnost. Kdybych neposílal rovnou signál na jiný presenter, ale měl bych mezitím nějaké přesměrování tak by formulář zase neukazoval chyby.

castamir
Člen | 629
+
0
-

Něco podobného už jsem řešil. Ve společném basePresenteru jsem měl tu komponentu i callback a vykreslování jsem měl přízpůsobené jinak v obecném layoutu a jinak v sign:in, který měl layout vlastní

enumag
Člen | 2118
+
0
-

@castamir: A jak jsi řešil to aby se po odeslání toho formuláře vykresleného jinde přesměrovalo na sign:in a současně nezmizely chyby ve formuláři?

castamir
Člen | 629
+
0
-

Tohle jsem neřešil, ale rozhodně bych vyzkoušel onError[] callback a getErrors() a pak třeba forward na Sign:in

Felix
Nette Core | 1245
+
0
-

Tohle me taky presne trapi. Mozna je na zamysleni, jestli by to melo fungovat nebo ne. Neprijde mi, ze by se tim neco porusovalo, nejspis to ale nejde nejak jednodusse naimplementovat.

ajda2
Člen | 66
+
0
-

Konkrétně můj případ je takový, že v BasePresenteru mám továrničku na formulář pro vyhledávání, protože potřebuji, aby byl formulář na všech stránkách. Samotné vyhledávání ale už chci mít řešeno ve zvláštním Presenteru. Nechci aby BasePresenter řešil takovéto věci. Taky chci mít pro vyhledávání jednu adresu, např pro sdílení výsledků atd.

Šlo by to nejspíš vyřešit přesměrováním z BasePresenteru a persistentního parametru, ale když chci data poslat POSTem, tak mi to nepomůže.
Není to asi návrhově čisté, protože formulář je svázaný se svým rodičem, ale konkrétně způsob takovéhoto vyhledávání mi přijde jako běžná praxe.

castamir napsal(a):

Já spíš nechápu, proč bys to měl vůbec přesměrovávat na jiný presenter. Metoda setAction je tam podle mého názoru kvůli zpracování mimo nette aplikaci. Je tedy nějaký rozumný argument, proč mít definici komponenty formuláře v jednom presenteru a callback v druhém?