Autor Zpráva
Taps
Profil
Zdravím, potřeboval bych poradit jak mohu v nette nastavit routování staré url adresy na novou. Potřeboval bych však aby se změna týkala jen jedné url adresy (nejedná se o globální změnu všech url adres). Zkoušel jsem níže uvedené, ale bohužel bezúspěšně
    $router = new RouteList();
    $router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
    $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

$router[] = new Route('article/detail/muj-clanek', 'Article:detail', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>', 'MujClanek:default');
    return $router;
    
Keeehi
Profil
Taps:
Tak předně, u routeru záleží na pořadí. A je nutné psát pravidla od konkrétních po obecná protože jinak to sežerou ta obecná a na konkrétní se nedostane.

Na 4. pravidlo se nedostane, jelikož všem takovým požadavkům odpovídá už 2. pravidlo. Což ničemu ale nevadí, jelikož dělají to samé, tak je tam jen zbytečně. Tedy to 4. pravidlo určuje jiný defaultní presenter ale to ke téměř vždy jedno.

Na 3. pravidlo se také nedostane, protože této URL odpovídá už 2. pravidlo. Ovšem i v tomto případě by vše mělo být v pořádku, jelikož to druhé pravidlo URL article/detail/muj-clanek přeloží jako Article:detail id=>muj-clanek což je téměř totožné s požadovaným Article:detail a ten id parametr navíc by tam vadit neměl.

Pro úplnost dodám, že 1. pravidlo smysl má a mapuje URL example.com/index.php na presenter Homapage a akci default. Ovšem jen při překladu požadavků. Při vytváření odkazů na Homepage:default se toto pravidlo přeskočí a použije se 2.

Takže abychom si to zjednodušili, pravidla 3 a 4 smažeme, jelikož jsou tam k ničemu. A budeme vycházet z této definice
    $router = new RouteList();
    $router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
    $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
    return $router;
Jakou starou URL chceš přidat a na jaký prezenter a akci se má mapovat?
Taps
Profil
Keeehi:
super, děkuji za analýzu a vysvětlení
Jedná se o tuto starou adresu article/detail/moje-url, kterou potřebuji přesměrovat na /moje-url. Presenter MojeUrl mám vytvořen a odkazovat má na default.
Keeehi
Profil
Taps:
Chceš při staré URL zobrazit MojeUrl:default nebo přesměrovat na /moje-url a po tom přesměrování si to už chytne to druhé pravidlo? Protože to je rozdíl. Původně jsi totiž o přesměrování nepsal.

S tím přesměrováním je to jednoduché, jelikož nette to dělá automaticky.
    $router = new RouteList();
    $router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
    $router[] = new Route('article/detail/moje-url', 'MojeUrl:default', Route::ONE_WAY);
    $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
    return $router;
Taps
Profil
super, funguje.

moc dekuji

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: