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

před 6 dny

Pavel Kravčík
Člen | 700
+
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?

před 6 dny

David Matějka
Moderator | 4735
+
+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

před 6 dny

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

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

před 6 dny

CZechBoY
Člen | 2210
+
+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).

Zápatí

Terms and conditions