Nutnost zakládat prázdné actionSomething($id) při použití plink

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

Zajímá mě, jestli něco děláme špatně nebo proč tady Nette vyhazuje výjimku.

Mějme jednoduchý presenter, má jednu komponent a jedno latte.

Presenter:

protected function createComponentDetail()
{
	$control = $this->IDetailFactory();
	$control->setId($this->getParameter('id'));

	return $control;
}

Latte:

{control detail}

Když někde jinde použiju odkaz na detail {plink Presenter:detail, $id}, tak to po mně bude chtít vytvořit actionDetail($id) i přestože bude „prázdná“. Presenter jí nevyžaduje – pokud nebude volána přes plink.

Z toho mi vychází, že správné předávání parametrů má vypadat následovně?

Upravený presenter:

public function actionDetail($id)
{
	$this['detail']->setId($id);
}

protected function createComponentDetail()
{
	$control = $this->IDetailFactory();
	return $control;
}

Ale pokud tu komponentu budu mít na pěti místech, musím vytvořit 5× action metodu?

David Matějka
Moderator | 6445
+
+2
-

tak samozrejme muzes predavat i pojmenovane parametry {link Presenter:detail [id => $id]}, pokud vsak chces, aby je nette pojmenovalo samo, tak zkratka action nebo render metoda musi existovat, i kdyz bude prazdna. neni na tom nic spatnyho, casto to tak taky mam

Pavel Kravčík
Člen | 1182
+
0
-

Jasně, díky. Nejhezčí mi přijde prostě správně definovat ten link plink ... , id => $id, to mi nenapadlo. :(

CZechBoY
Člen | 3608
+
+1
-

Já si ukládám parametry action metody do property a z tý potom čtu při vytváření komponenty (v createComponentXXX v presenteru).