Problém s přesměřováním na správnou kombinaci modul/presenter/akce

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

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

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

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