Jak správně nastavit routování bez kolize pravidel? parametr/presenter

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

Mám následující strukturu aplikace:

AdminModule
	...
FrontModule
	Presenters
		DefaultPressenter
		SitemapPressenter
		UserPresenter
		...

A chtěl bych docílit následujících výsledných adres:

www.localhost.dev/user/info
www.localhost.dev/sitemap/
www.localhost.dev/hlavni-kategorie/
www.localhost.dev/jina-hlavni-kategorie/nejaka-podkategorie/

Poradil by mi někdo jak správně nastavit routy?
Pořád mi to koliduje. Změnou pořadí mi zmizí problém s odkazováním na jiné pressentery, ale už nedojde k přepsání hezkých URL na kategorie a subkategorie.
Sloučením pravidel jsem se dostal pouze k tomu, že výsledná adresa je následující, což nechci.

www.localhost.dev/default/default/hlavni-kategorie/nejaka-podkategorie/

RouterFactory

...
$router[] = $frontRouter = new RouteList('Front');
		$frontRouter[] = new Route('//www.localhost.dev/[<maincategory>/][<subcategory>/]', 'Default:default');
		$frontRouter[] = new Route('//www.localhost.dev/<presenter>/<action>[/<id>]', 'Default:default');
...

Pokud první pravidlo přepíšu na

$frontRouter[] = new Route('//www.localhost.dev/[maincategory-<maincategory>/][subcategory-<subcategory>/]', 'Default:default');

Tak mám sice po problémech, ale zároveň mám zase adresu, které nechci docílit(„maincategory-“ a „subcategory-“ v adrese nechci).

www.localhost.dev/maincategory-hlavni-kategorie/subcategory-nejaka-podkategorie/

Jak je možné výše uvedené řešit?

Nette 2.0.10 | PHP 5.4.12

hiny
Člen | 35
+
0
-

Nikdo neví jak toto řešit?

petr.pavel
Člen | 535
+
0
-

Pokud hlavní kategorie může být cokoliv, tj. nezačíná něčím nebo neobsahuje jen některé znaky, prostě pokud není možné definovat pravidlo, které by ze zadaného řetězce jen analýzou toho řetězce bez komunikace s db, pochopilo, co je kategorie a co název presenteru, tak máš dvě možnosti:

  1. natvrdo definovat routy pro všechny presentery a pak teprve /[<maincategory>/][<subcategory>/]

    Vůbec bys tedy nepoužil /<presenter>/<action>[/<id>]. Tohle by mělo smysl jen, pokud máš max cca pět presenterů.

  2. nebo univerzálnější přístup, vlastní router
hiny
Člen | 35
+
0
-

Děkuji za podněty.

Zatím jsem to vyřešil takto:

$frontRouter[] = new Route('//www.localhost.dev/<presenter error|sitemap|user>/<action=default>[/<id>]');
$frontRouter[] = new Route('//www.localhost.dev/[<maincategory>/][<subcategory>/][<subcategorysub>/]', 'Default:default');

S přidáním dalších presenterů, se tvorbě vlastního routeru asi stejně nevyhnu.

Jaky má vliv <presenter error|sitemap|user> na výkon v případě, že by těch presenterů bylo takto vyjmenováno třeba 20?