Generování odkazů
Parametry metody link() nesouvisí přímo s URL. Prvním argumentem je cíl (destination) určující cílový presenter & view, druhým (resp. dalšími) jsou parametry předávané tomuto presenteru:
$link->(destination [,arg [,arg ...]])
- kde destination je
'anotherView'(odkaz na aktuální presenter a anotherView)'AnotherPresenter:anotherView'(odkaz na AnotherPresenter a anotherView)'AnotherPresenter:'(ozkaz na AnotherPresenter a výchozí view ‚default‘)'AnotherModule:Presenter:view'(odkaz do jiného modulu)- Parametry presenteru je možné předat jako asociativní pole
$this->link('show', array('id' => 10, 'lang' => 'en'))
Asociativní pole není příliš sexy, proto Nette nabízí vychytávku:
pokud existuje v cílovém presenteru metoda renderShow($id, $lang,
...) nebo metoda presentShow($id, $lang, ...), kde ono
‚show‘ v názvu odpovídá názvu linkovaného view, je možné klíče
‚id‘ a ‚lang‘ vynechat – automaticky se vezmou z parametrů
těchto metod:
$this->link('show', array(10, 'en'))
A naopak, když je dotyčná metoda po odkliknutí zavolána, tak se jí
předají tyto argumenty v parametrech $id a $lang.
V poli je možné uvést další parametry, které metody
renderShow a presentShow nedefinují, například lze
nastavit nějaký persistentní parametr (v tom případě ovšem už
s asociativním klíčem). Pokud žádný takový další parametr není, je
možné pole úplně vynechat:
$this->link('show', 10, 'en')
Tedy v Nette se odkazuje na presenter & view, nebo ještě jednodušeji:
odkazuje se na konkrétní metodu. $this->link('catalog:show', 10,
'en') odkazuje a po odkliknutí zavolá metodu
CatalogPresenter::renderShow(10, 'en'). Jaké se vytvoří URL
v tu chvíli nehraje roli. To je úkol oddělené vrstvy – routování.
