Formulare onSubmit akce na jiny presenter
- potapnik
- Člen | 127
Ahoj, stále nějak nedokážu vyřešit následující:
- v HomepagePresenteru mám formulář na vyhledávání, který se zpracuje nasledujici fce
<?php
HomepagePresenter:
public function searchFormSubmitted(Form $form) {
$this->redirect('Search:default', $form);
$this->terminate();
}
SearchPresenter:
public function actionDefault(Form $form) {
var_dump($form);
}
?>
A ladenka rve: Argument 1 passed to SearchPresenter::actionDefault() must be an instance of Nette\Application\UI\Form, null given
Jak tedy korektne vyresit tohle? Chci predat form, nebo vsechny jeho values SearchPresenteru, protoze nechci prasit vyhledavani do HomepagePresenteru, ani do Basepresenteru, logicky tam prece obsluha vyhledavani nepatri.
Predem diky :-) beru i reseni ktery komplet prekopou i z logiky veci :-)
- arron
- Člen | 464
Doporuceni pro tuto konkretni situaci: v submitu si z formuláře vytahni to, co ten uživatel hledá (popřípadě další parametry, pokud tam nějaké jsou) a s temito parametry přesměruj na SearchPresenter. Čili něco jako:
//HomepagePresenter:
public function searchFormSubmitted(Form $form) {
$form->getValues();
$this->redirect('Search:default', $values['searchString']);
$this->terminate();
}
//SearchPresenter:
public function actionDefault($searchString) {
//whatever is necessary to do with string to search
}
Je to celé daleko čistější…
Editoval arron (26. 2. 2012 12:42)
- potapnik
- Člen | 127
Jenže to vyhledávání má spoustu parametrů, takže bych chtěl předat víc values, a to mi právě nefunguje, protože laděnka prská buď, že je ta předávaná proměnná prázdná – když předávám celej form objekt, nebo že očekávala scalar, když předávám všechny values přes getValues…tak nevím…
- duke
- Člen | 650
Zkus:
$values = $form->getValues(TRUE); // TRUE vynutí návratovou hodnotu typu array
// $values = $this->filterSearchData($values); // případné odfiltrování nadbytečných položek
$this->redirect('Search:', $values);
Nejspíš by fungovalo také:
$this->redirect('Search:', (array) $form->values);
Editoval duke (26. 2. 2012 13:47)