routy vs multirouty (moduly)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Rypi
Člen | 38
+
0
-

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
+
0
-

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');

vid.

bojovyletoun
Člen | 667
+
0
-

k čemu je MultiRouter?

jtousek
Člen | 951
+
0
-

bojovyletoun napsal(a):

k čemu je MultiRouter?

Příště zkus dokumentaci

Rypi
Člen | 38
+
0
-

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
+
0
-

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
+
0
-

Rypi napsal(a):
Funguje to tak, jakoby u kratší routy bylo Route::ONE_WAY.

opraveno v poslední revizi.

Rypi
Člen | 38
+
0
-

Díky moc! stáhl jsem novou revizi a už vše funguje přesně tak, jak má.