Proč se zobrazuje DEFAULT v URL?
- reidim
- Člen | 4
Zdravím,
mám problém který mi hlava nebere.
Mám FotogaleriePresenter, který má
actionDefault($id) a renderDefault($id).
Pokud v Latte vytvořím odkaz:
<a n:href="fotogalerie:default 2012">2012</a>
tak bych chtěl, aby mě to přesměrovalo na
fotogalerie/2012.
Místo toho mě to však přesměruje na
fotogalerie/default/2012.
Je mi jasný že to můžu obejít nějakým actionRok a renderRok a mít pak
fotogalerie/rok/2012, ale to nechci a zkrátka chci, aby
výsledná adresa byla fotogalerie/2012.
V bootsrapu mám jednu jedinou Routu a to:
$container->router[] = new Route('fotogalerie/<id>', array(
'presenter' => 'fotogalerie',
'action' => 'default'
));
V čem je problém, že se mi tam vždycky nacpe ten DEFAULT do URL?
Nette mám akutální a běží mi to na localhost Apache Serveru.
Díky Radim
Editoval reidim (25. 3. 2013 18:21)
- Felix
- Nette Core | 1196
Bacha na RouterFactory, jestli pouzivas sandbox, tak je ve slozce app/router/RouterFactory.php.
Takze tu tvoji routu pridej tam nad defaultni routu.
Link: https://github.com/…rFactory.php#L23
Editoval Felix (25. 3. 2013 19:05)
- reidim
- Člen | 4
Přišel jsem na to, jak docílit odmazání DEFAULT z URL, ale těžko
říct, zda ne až moc násilně:
Nechal jsem si bootstrapu před vlastní definicí routy vypsat proměnnou
router[]:
dump($container->router);
die();
To mi vypsalo následující:
Nette\Application\Routers\RouteList(3) {
cachedRoutes private => NULL
module private => ""
list private => array(2) [
0 => Nette\Application\Routers\Route(7) {
mask private => "index.php" (9)
sequence private => array(1) [ ... ]
re private => "#index\.php/?\z#Aiu" (19)
metadata private => array(2) { ... }
xlat private => array(0)
type private => 3
flags private => 1
}
1 => Nette\Application\Routers\Route(7) {
mask private => "<presenter>/<action>[/<id>]" (27)
sequence private => array(11) [ ... ]
re private => "#(?:(?P<presenter>(?U)[a-z][a-z0-9.-]*)/(?:(?P<action>(?U)[a-z][a-z0-9-]*)(?:/(?P<id>(?U)[^/]+))?)?)?/?\z#Aiu" (109)
metadata private => array(3) { ... }
xlat private => array(0)
type private => 3
flags private => 0
}
]
}
Ani jednu z těchto Route jsem v bootstrapu nekonfiguroval a tak předpokládám, že jsou tam defaultně z Nette. Tu druhou jsem se pokusil offsetem odstranit, ale nepodařilo se. Proto jsem ji přepsal násilně takto:
$container->router->offsetSet(1, new Route('', 'Homepage:default'));
Po tomto přemázání mi již adresování bez DEFAULT v URL funguje.
Je to opravdu jediná možnost? Proč mám již předem definovanou ROUTU
<presenter>/<action>[/<id>]?
Díky