routy vs multirouty (moduly)
- Rypi
- Člen | 38
Ahoj,
včera jsem se snažil přidat do aplikace (nette 2.0 alpha) moduly. Kvůli
tomu jsem i přepsal routy na Multirouty. Mám ale takový problém.
Při použití prvního kódu a zadání do prohlížeče „s4“ se mi
zobrazí stránka s4 – vše funguje. Pokud použiju druhý kód a opět do
prohlížeče zadám „s4“, provede se přesměrování na pages/single/4.
Funguje to tak, jakoby u kratší routy bylo Route::ONE_WAY. Dělám něco
špatně, nebo je to nějaká „vlastnost“?
Problém u multirouteru také nastává v případě, že chci definovat něco
takového:
$frontRouter[] = new Route('clanky/<action>[/<id>]', 'Posts:default');
V tom případě mě to přesměruje na posts/.
<?php
$router[] = new Route('s<id>', array(
'module' => 'Front',
'presenter' => 'Pages',
'action' => 'single',
'id' => NULL,
));
$router[] = new Route('<presenter>/<action>[/<id>]', array(
'module' => 'Front',
'presenter' => 'Todolist',
'action' => 'default',
'id' => NULL,
));
?>
<?php
$router[] = $frontRouter = new MultiRouter('Front');
$frontRouter[] = new Route('s<id>', array(
'presenter' => 'Pages',
'action' => 'single',
'id' => NULL,
));
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', array(
'presenter' => 'Todolist',
'action' => 'default',
'id' => NULL,
));
?>
Díky za případnou radu :)
- srigi
- Nette Blogger | 558
Rypi napsal(a):
Dělám něco špatně
Ano, ta tvoja syntax zapisu multiroutra je prehodena:
$router[] = $frontRouter = new MultiRouter('Front'); ... $frontRouter[] = new Route('<presenter>/<action>[/<id>]', array( ...
Spravne je:
$frontRouter = $router[] = new MultiRouter('Front');
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
- Rypi
- Člen | 38
Díky zápis jsem opravil, ale funkce je stále úplně stejná. Jak docílit
toho, aby se mi stránka /n-4 nepřesměrovala na news/single/4 ?
Aplikace běží na: http://vps2.rypi.cz/…raNette/www/
<?php
$adminRouter = $router[] = new MultiRouter('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Default:default');
$frontRouter = $router[] = new MultiRouter('Front');
$frontRouter[] = new Route('index.php', 'Posts:default', Route::ONE_WAY);
$frontRouter[] = new Route('n-<id>', 'News:single');
$frontRouter[] = new Route('c-<id>', 'Posts:single');
$frontRouter[] = new Route('s-<id>', 'Pages:single');
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Posts:default');
?>
- bojovyletoun
- Člen | 667
pořadí je asi ok
možná v presenteru ještě $this->autoCanonicalize=0;
pak bych ještě pro jistotu zkusil přidat Route::ONE_WAY do routy "n-…
A čemu je tedy ten multirouter? Dokumentaci jsem zkusil dávno. Měl jsem zato, že Multirouter je vždy jen jeden do něj se přidávají Route. Takže je to víceúrovňová struktura a fungují tam věci jako dědění?
- David Grudl
- Nette Core | 8218
Rypi napsal(a):
Funguje to tak, jakoby u kratší routy bylo Route::ONE_WAY.
opraveno v poslední revizi.