Problém s přesměřováním na správnou kombinaci modul/presenter/akce
- fary
- Člen | 155
Ahoj, mám tento router:
class RouterFactory
{
/**
* @return \Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('user/sign/activate/<token>', 'User:Sign:activate');
$router[] = new Route('', 'Homepage:default');
$router[] = new Route('index.php', 'Homepage:default');
$router[] = new Route('admin/', 'System:Homepage:default');
$router[] = new Route('admin/<module>/<presenter>/<action>[/<id>]', 'System:Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
$router[] = new Route('<module>/<presenter>/<action>[/<id>]', 'System:Homepage:default');
return $router;
}
}
Můj problém je ten, že po registraci nového uživatele generuji odkaz na
//:User:Sign:activate
, tedy na modul User, presenter Sign a akce
activate, cesta je absolutní, takže by se mělo vygenerovat toto: http://example.com/…e/VoZmBLEzmr. Ovšem místo toho se mi
generuje tento odkaz: http://example.com/…e/VoZmBLEzmr. Potřeboval bych se
zbavit toto řetezce admin/ v té adrese. Zkoušel jsem všechno možné a už
si nevím rady.
- petr.jirous
- Člen | 128
Zkus přehodit pořadí rout takto:
class RouterFactory
{
/**
* @return \Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('user/sign/activate/<token>', 'User:Sign:activate');
$router[] = new Route('', 'Homepage:default');
$router[] = new Route('index.php', 'Homepage:default');
$router[] = new Route('<module>/<presenter>/<action>[/<id>]', 'System:Homepage:default');
$router[] = new Route('admin/', 'System:Homepage:default');
$router[] = new Route('admin/<module>/<presenter>/<action>[/<id>]', 'System:Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
}
- Šaman
- Člen | 2659
Imho ty routy s adminem jsou nejednoznačné. Ty skutečně říkáš, že
každá routa může (a nemusí) začínat /admin/.
A protože routa s adminem je výš, použije se. Prohození rout asi
pomůže, ale pak zase nikdy nenastane to, že se vygeneruje adresa s
/admin/.
Nechceš dosáhnout spíš něčeho takového? Admin modul začíná na /admin/ a front modul nemá ani modul, ani nic v adrese, chová se jakoby moduly vůbec neexistovaly.
<?php
# jednosměrná routa pro zpracování přímého volání souboru index.php
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
# zkratky
$router[] = new Route('prihlaseni', 'Application:login');
$router[] = new Route('odhlaseni', 'Application:logout');
$router[] = new Route('registrace', 'Application:registration');
$router[] = new Route('zapomenute-heslo', 'Application:lostPassword');
# běžné routy
$router[] = new Route('admin/<presenter=User>/<action=list>[/<id>]', ['module' => 'admin']);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
?>