Formulare onSubmit akce na jiny presenter

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

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 :-)

Felix
Nette Core | 1189
+
0
-

Spis pouzij:

public function createComponentSearchForm() {
	....
	$form->onSuccess[] = callback('otherPresenter', 'formSubmitted');
}
arron
Člen | 464
+
0
-

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
+
0
-

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
+
0
-

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)