Zpracování formuláře různými presentery
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- OK3
- Člen | 91
Prosím o radu..
Mám 3 presentery. Na každé stránce (nezáleží na tom, který presenter
požadavek zpracovává) se zobrazuje pole pro vyhledávání (komponenta se
volá ze základního layoutu). Ačkoliv DefaultPresenter i ErrorPresenter
dědí od stejného předka, v prvním případě formulář funguje,
v druhém ne – obsluha je však stejná. Zjistil jsem, že metoda je prostě
v prvním případě volána, v druhém nikoliv. Co mi uniká?
class BasePresenter extends Presenter {
public function createComponentSearchForm() {
$form = new AppForm($this, 'searchForm');
$form->addText('keyword', 'Hledaná fráze:');
$form->addSubmit('go', 'Send');
$form->onSubmit[] = callback($this, 'searchFormSubmitted');
return $form;
}
public function searchFormSubmitted(AppForm $form) {
$data = $form->getValues();
// zpracování
}
}
class DefaultPresener extends BasePresenter {
// tohle se zavolá
public function searchFormSubmitted(AppForm $form) {
parent::searchFormSubmitted($form);
}
// nebo se může i zakomentovat a pak se zavolá metoda rodiče
/*
public function searchFormSubmitted(AppForm $form) {
parent::searchFormSubmitted($form);
}
*/
}
class ErrorPresenter extends BasePresenter() {
public function renderDefault() {}
// tohle se nikdy nezavolá, ani metoda rodiče - proč?
public function searchFormSubmitted(AppForm $form) {
parent::searchFormSubmitted($form);
}
}
Formulář pro vyhledávání by měl být použitelný z kterékoliv stránky. Pokud skončím na stránce 404 (ErrorPresenter), odeslání formuláře nefunguje – sice připojí do url ?do=searchForm-submit, ale nic se nestane a metoda se nezavolá..
Nette v. 1.0-dev
Editoval OK3 (21. 10. 2010 10:05)