Nette\Application\MultiRouter
Hromadné úložiště pro routy aplikace.
Jelikož Nette narozdíl od jiných frameworků nepojmenovává routy, je zde důmyslný mechanismus, který z jednoho globálního úložiště na routy vybere odpovídající routu (objekty Route a SimpleRouter), pro kterou požadavek nejvíce vyhovuje. To, zda-li se vybere úspěšně ta routa, kterou jsme zamýšleli, závisí na našich konkrétních definicích masek rout. Obecně platí pravidlo, že routy deklarujeme postupně od těch nejvíce specifických po ty obecné. Tím se vyhneme případným kolizím.
Kolik regulárů používáš v .htaccess, s tolika routami si vystačíš v Nette!
MultiRouter je v základu potomek objektů z jmenného prostoru Nette\Collections, konkrétně objektu ArrayList, který je přímým potomkem Collection. Sám implementuje i rozhraní IRouter stejně jako Route a SimpleRouter.
Tato hierarchie poskytuje vlastnosti, díky kterým je routování v Nette
čistě a rychle napsáno (rychlost parsování URL je ekvivalentní jako
RewriteRules z .htaccess souborů), proto nemá cenu například
nastavení MultiRouteru kešovat. Naopak – funguje rychleji, než když se
načítá z keše! Pokud tedy negenerujete routy z databáze, nemá cenu se
keší zabývat.
Na závěr se sluší dodat, že jako vše v Nette je možno napsat vlastní router a implementovat si routovací techniky dle libosti, stačí implementovat daná rozhraní.
Jednoduchá ukázka použití MutliRouteru a tvaru routy:
// získáme instanci objektu MultiRouter, který slouží jako úložiště pro routy
$router = Environment::getApplication()->getRouter();
// přidáme routu, objekt Route do MultiRouteru
$router[] = new Route('/clanek/<id>', array(
'presenter' => 'Article',
'view' => 'article',
'lang' => 'cs',
));
Další příklady rout lze nalézt v dokumentacích tříd Route a SimpleRouter a na fóru.
Viz také:
- MultiRouter API reference
- IRouter API reference
- Routování
- Route
- SimpleRouter
- Fórum: Příklady routeru
- Fórum: Routovací tipy a triky
