Form setAction

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

Mám následující problém. V jednom presenteru mám formulář na vyhledávání ale data z formuláře chci posílat jinému presenteru (SearchPresenter). Ať dělám co dělám tak se nedaří. V presenteru s formulářem mám následující kód:

<?php
 public function actionDefault()
 {
   ...
   /* @var $form AppForm */
   $form = $this->buildSearchForm();
   $form->setAction($this->link('Search:Search', array('do' => 'search-submit')));
   ....
 }
?>

a v presenteru Search mám

<?php
	public function actionSearch($form)
	{
	  ...
	}
?>

Pořád mi to ale hází vyjímku BadSignalException #403 – The signal receiver component ‚search‘ is not found. I když přidám $form->onSubmit[] = array(‚Search‘, ‚Search‘); .. Jsem se Nette začátečník, takže ocením každou radu:) díky..

jasir
Člen | 746
+
0
-

Já myslím, že by jsi měl data zpracovat v tomto presenteru a pak provést redirect na Search, už GET parametry.

roadster
Člen | 2
+
0
-

To je sice řešení, ale když pak budu chtít mít tenhle formulář na víc stránkách, tak ho budu muset takhle ošetřovat v každym presenteru zvlášť… nebo si budu muset udělat nějakýho předka a ošetřovat to v něm. Jenže to musim všem presenterum nastavit že od něj maji dědit.. Nevim přijde mi, že to musí jít určitě nějak jednoduše, jenom dělám nějakou základní chybu:)

jasir
Člen | 746
+
0
-

roadster napsal(a):

To je sice řešení, ale když pak budu chtít mít tenhle formulář na víc stránkách, tak ho budu muset takhle ošetřovat v každym presenteru zvlášť… nebo si budu muset udělat nějakýho předka a ošetřovat to v něm. Jenže to musim všem presenterum nastavit že od něj maji dědit.. Nevim přijde mi, že to musí jít určitě nějak jednoduše, jenom dělám nějakou základní chybu:)

Přesuň formulář do vlastní komponenty a řeš ten handling v komponentě. Pak v každém presenteru, kde chceš použít jeho funkčnost jenom použiješ tu komponentu. (Nebo připoj komponentu v BasePresenteru – pak bude dostupná ve všech presenterech, které od něj dědí.)

Editoval jasir (11. 6. 2009 12:16)

_Martin_
Generous Backer | 679
+
0
-

V Nette je takový užitečný zvyk (nikoliv nutné pravidlo) dědit všechny presentery od tzv. BasePresenteru, který slouží například pro registrování společných filtrů šablon či společných komponent. Tohle by byla práce přesně pro něj, za použití továrničky na komponenty.