Přepis podmínek pro routování v Nette

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

Zdravím, v bootstrap mám níže uvedený zápis pro routování

if (isset($_SERVER['NETTE_HTACCESS'])) { // FastCGI
    $container->router[] = new Route('index.php', 'Front:News:news', Route::ONE_WAY);

    $container->router[] = $adminRouter = new RouteList('Admin');
    $adminRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Info:default');

    $container->router[] = $frontRouter = new RouteList('Front');
    $frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
    //$frontRouter[] = new Route('clanek/<presenter>', 'Homepage:clanek');


} else {
    $container->router = new SimpleRouter('Front:Base');
}

a potřeboval bych do routování připsat níže uvedená pravidla, které jsem měl doposud v htaccessu. Studoval jsem návod ohledně routování, ale bohužel se mi nepodařilo zprovoznit níže uvedená pravidla pro routování

RewriteRule ^([^/]+)/?$ ?page=$1
RewriteRule ^zapasy/([^/]+)?/?$ ?page=zapasy&league=$1 [L]
RewriteRule ^archiv-clanky/([^/]+)?/?$ ?page=archiv-clanky&rok=$1 [L]
#detaily hráčů
RewriteRule ^hrac/([^/]+)?-([^/]+)?/?$ ?page=detailHraci&IDplayer=$1&jmeno=$2 [L]
RewriteRule ^hraci/([^/]+)?/?$ ?page=hraci&liga=$1 [L]
#číslování v diskuse
RewriteRule ^diskuse/([^/]+)?/?$ ?page=diskuse&strana=$1 [L]

#reakce
RewriteRule ^reakce/([^/]+)?/?$ ?page=diskuse&idx=$1 [L]


#clanky
RewriteRule ^clanky/([^/]+)?/?$ &nazev=$1 [L]

Ještě dodám že aplikaci mám rozdělenou zvlášt na veřejnou a administrační část.

Editoval Taps (15. 4. 2012 11:45)

nanuqcz
Člen | 822
+
0
-

Ahoj,
myslím, že by bylo potřeba ještě říct, jakou bys chtěl mít strukturu presenterů a akcí, ale pro představu, třeba takhle:

// RewriteRule ^([^/]+)/?$ ?page=$1
$frontRouter[] = new Route('[<presenter>]', 'Articles:default');
// RewriteRule ^zapasy/([^/]+)?/?$ ?page=zapasy&league=$1 [L]
$frontRouter[] = new Route('zapasy[/<league>]', 'Matches:default');
// RewriteRule ^archiv-clanky/([^/]+)?/?$ ?page=archiv-clanky&rok=$1 [L]
$frontRouter[] = new Route('archiv-clanky[/<year>]', 'ArticlesArchive:default');

Na ostatní routy už určitě přijdeš sám, je to pořád na stejné brdo :-)

P.S. názvy proměnných i názvy presenterů jsem rovnou překládal do angličtiny, je to takovým dobrým Nette zvykem :-)

Taps
Člen | 168
+
0
-

Díky za info
přidal jsem tedy

	$frontRouter[] = new Route('clanky[/<nazev>]', 'Clanky:default');

odkaz mám v tomto tvaru

<a n:href="clanky/{$clanek->url}">celý článek</a>

a zobrazuje se mi chyba

<a href="error: No route for Front:Homepage:clanky/nazevclanku()

kde by mohl být problém ?

Taps
Člen | 168
+
0
-

Díky za info
přidal jsem tedy

	$frontRouter[] = new Route('clanky[/<nazev>]', 'Clanky:default');

odkaz mám v tomto tvaru

<a n:href="clanky/{$clanek->url}">celý článek</a>

a zobrazuje se mi chyba

<a href="error: No route for Front:Homepage:clanky/nazevclanku()

kde by mohl být problém ?

nanuqcz
Člen | 822
+
0
-

Do n:href (což je to samé, jako makro {link}) se dávají jen cesty (ne celá URL) ve tvaru Presenter:action.

V tvojem případě tedy

<a n:href="Clanky:default, nazev => $clanek->url">celý článek</a>

…doporučuju si jako první projít Quickstart, kde je i tento problém krásně vysvětlen :-)

Taps
Člen | 168
+
0
-

Děkuji