Presenter redirect a Nette\Application\UI\InvalidLinkException – expected scalar
- suxik
- Člen | 62
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););
}
}
- David Matějka
- Moderator | 6445
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ě.