Jak správně nastavit routování bez kolize pravidel? parametr/presenter
- hiny
- Člen | 35
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
- petr.pavel
- Člen | 535
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:
- 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ů.
- nebo univerzálnější přístup, vlastní router
- petr.pavel
- Člen | 535
Projdi si taky sekci fóra o Routování, třeba tady je téma, které podle mě řeší, co potřebuješ.
- hiny
- Člen | 35
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?