Zpracování formuláře na jiné stránce
- hauerland
- Člen | 16
Zdravím,
v BasePresenteru si vytvořím komponentu s vyhledávacím formulářem.
Výsledky bych rád odeslal na jiný presenter. Sice jsem prohledal fórum a
našel několik příspěvků na toto téma, ale nedaří se mi to zprovoznit.
Zkoušel jsem použít $form->setAction v tomto tvaru:
$form->setAction($this->link('Hledani', array('do' => 'hledaniFormSubmitted')));
a ještě nakonec uvedl
$form->onSubmit[] = array('Hledani', 'hledaniFormSubmitted');
Ve zdrojovém kódu se ale vykreslí formulář s kódem:
/?do=searchForm-submit&presenter=Aktualnipresenter a vyhodí mi to
hlášku:
InvalidStateException Event handler ‚Hledani::hledaniFormSubmitted‘ is not
callable. Zde je celý kód továrničky:
protected function createComponentSearchForm()
{
$form = new AppForm;
$form->setAction($this->link('Hledani', array('do' => 'hledaniFormSubmitted')));
$form->addText('search', 'Hledání:');
$form->addImage('ok', 'button.png');
$form->onSubmit[] = array('Hledani', 'hledaniFormSubmitted');
return $form;
}
- Milhauz
- Člen | 26
Ahoj,
metodu setAction
není potřeba použít. Stačí použít
onClick
, případně onSubmit
. V poli pro
onSubmit
musíš odkazovat na presenter a metodu, viz. kód.
$form = new AppForm;
$form->addText('search', 'Hledání:');
$form->addImage('ok', 'button.png');
$form->onSubmit[] = array('HledaniPresenter', 'hledaniFormSubmitted');
return $form;
- hauerland
- Člen | 16
Aha, díky. Chybělo mi tam to slovo Presenter v názvu. Teď už se mi to na ten presenter odešle, ale když pak chci něco předat šabloně přes $this->template->formdata, tak mi to píše „Using $this when not in object context“. Kdyby se to udělalo přes setaction, tak by to podle mě fungovalo, protože by se to přesměrovalo. Takto to vypadá, že se jenom připojí ta metoda ke stávajícímu presenteru a dělá to bordel. Jenom nechápu, proč ten setaction nefunguje.
- Milhauz
- Člen | 26
Problém je ten, že se ta metoda volá staticky. Nevytvoří se instance
presenteru a tak $this
neexistuje. Pokud potřebuješ vytvořit
vyhledávací formulář, který má být zřejmě na každý stránce, asi
nejlepší bude ho vytvořit v BasePresenteru
a do
onSubmit
přímo přiřadit
array($this, 'hledaniFormSubmitted');
Podobný problém se tu již
řešil. Mohlo by ti to pomoct.
- Skic
- Člen | 18
Ja mám ještě problém volat prezenter z jiného modulu, předpokládám toto následující volání
$form->onSubmit[] = array('ISModule/LoginPresenter', 'actionFormLoginSubmit');
vyhodi vyjimku:
InvalidStateException Event handler ‚ISModule/LoginPresenter::actionFormLoginSubmit‘ is not callable
Predem dik za radu.
EDIT: Reseni ve threadu https://forum.nette.org/…in-formulare
Editoval Skic (13. 10. 2009 21:51)