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