jiné action a zpracování formuláře
- ajda2
- Člen | 66
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
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)
- ajda2
- Člen | 66
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
@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.
- ajda2
- Člen | 66
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?