Presenter redirect a Nette\Application\UI\InvalidLinkException – expected scalar

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

Ahoj, mám problém, mám na stránce search formulář, zadám do něj vyhledávaný výraz, odešlu, záznam/y se v databázi najdou a když chci zobrazit výsledky v jiném presenteru, přibalím je do metody redirect jako pole. Updatnul jsem si na Nette 2.2.2 a nepomohlo mi to. Kde dělám chybu?

Chyba se děje na řádku: $this->redirect("Homepage:searchResults", $args = array("articles" => $results, "keywords" => $keywords););

Nette\Application\UI\InvalidLinkException
Invalid value for parameter ‚articles‘ in method HomepagePresenter::rendersearchResults(), expected scalar

protected function createComponentSearchForm()
	{
		$form = new Form();

		$form->addText('keywords')->addRule(Form::FILLED, 'Enter keywords!')
			->addRule(Form::MIN_LENGTH, 'Min. length is 3 characters', 3);

		$form->onSubmit[] = callback($this, 'searchFormSubmitted');

		return $form;
	}


	public function searchFormSubmitted(Form $form)
	{
		$values = $form->values;
		$keywords = $values['keywords'];

		if ($keywords != $this->input_text)
		{
			$results = $this->context->search->search($keywords)->fetchAll();
			$this->redirect("Homepage:searchResults", $args = array("articles" => $results, "keywords" => $keywords););
		}
	}
CZechBoY
Člen | 3608
+
0
-

Wtf? nemůžeš parametrem předávat celou databázi :D
Dej si rovnou callback onSubmit na ten HomepagePresenter:searchResults

suxik
Člen | 62
+
0
-

Poradíš, jak to mám udělat?

suxik
Člen | 62
+
0
-

jo už vím, jak to myslíš, tak jsem nakonec poslal do toho redirectu jen keywords a zpracování hledání jsem provedl v renderSearchResults

CZechBoY
Člen | 3608
+
0
-

Nedávej tam onsubmit přímo v továrničce, ale až v homepagepresenteru dej

$form = new SearchForm();
$form->onSubmit[] = callback($this, 'searchFormSubmitted');

Btw kde vlastně máš tenhle kod co si poslal?

David Matějka
Moderator | 6445
+
0
-

btw, onSubmit je spatny event, pouzij onSuccess, viz: https://doc.nette.org/cs/forms#…

Handlery událostí onSuccess a onClick se volají pouze v případě, že je odeslání validní. Uvnitř obslužných metod tedy nemusíme validitu ověřovat. Formulář má ještě událost onSubmit, která se volá vždy nezávisle na validitě.