route Frontpage s jedním parametrem anebo /admin

- dnd
 - Člen | 16
 
Ahoj všem,
Pro frontpage je požadavek pěkné URL vždy ve tvaru example.com/parametr
(nebo jen example.com bez parametru).
Do administrace bych pak rád vstoupil odkazem /admin
Moje původní představa byla
<?php
class RouterFactory
{
    /**
     * @return Nette\Application\IRouter
     */
    public function createRouter()
    {
        $router = new RouteList();
        $router[] = new Route('admin/<presenter>/<action>[/<id>][/<id2>]', 'Homepage:default');
        $router[] = new Route('[<page>]','Front:default');
        return $router;
    }
}
?>
pro admin to funguje dobře, jenže když použiju např. example.com/mojestranka, router to zřejmě v rámci obousměrnosti doplní o /admin, protože mu asi ten parametr sedí do <presenter>. Stránka se mi ale zobrazí správně, tedy Front:default a parametr se předá také správně, jenže adresa se přepíše na example.com/admin/front/?page=mojestranka
Zkoušel jsem ještě jiné řešení, otočit routy opačně s tím, že pro <page> odpovídá vše kromě admin
<?php
    $router[] = new Route('[<page ^(^admin)$>]','Front:default');
    $router[] = new Route('admin/<presenter>/<action>[/<id>][/<id2>]', 'Homepage:default');
?>
ale to taky nefunguje. Pevně věřím tomu, že mám špatně regulární výraz, už jsem vzdal hledání pročítání návodů, všude píšou jak negovat znak nebo písmeno, ale ne celý výraz.
Prosím o nasměrování správným směrem, budu vděčen za každou radu,
bohužel jsem tohle nikde nenašel.
Je to můj první kompletní nette projekt, stavím na sandboxu, nette 2.0.11,
nemám rozdělení na moduly.
EDIT: omlouvám se za smazání a znovuvložení, z nějakého důvodu se mi v tématu zobrazoval příspěvek 3× a při pokusu poslední odstranit se to smázlo celé :-(
Editoval dnd (27. 8. 2013 12:22)

- dnd
 - Člen | 16
 
Našel jsem spoustu regulárních výrazů, jeden který by měl fungovat
^(admin.+|(?!admin).*)$
v jednom online testeru tedy funguje přesně tak, jak chci, vrátí true vždy
kromě výrazu admin tzn
cokolivadmin true
admincokoliv true
radminp true
admin false
admi true
JENŽE router to nebere :-(
Nevíte prosím, kde může být chyba?

- dnd
 - Člen | 16
 
matej21 napsal(a):
vytvor si AdminModule pro administraci
Vytvořil jsem AdminModule a FrontModule a stále mam stejný problém.
Pokud mám první řádek pro Front, vše na front funguje dobře, ale nedostanu se do administrace, logicky /admin bere jako <page>, která neexistuje.
Když to otočím, tak adresa Frontu pak vypadá nějak takto:
http://domena.cz/admin/front.front/?page=o-kosmonautech
ale měla by vypadat takto:
http://domena.cz/o-kosmonautech
<?php
	$router[] = new Route('[<page>]','Front:Front:default');
	$router[] = new Route('admin/<presenter>/<action>[/<id>][/<id2>]', 'Admin:Homepage:default');
?>
				
- PavelJurasek
 - Člen | 39
 
Tak nějak by to mohlo vypadat.
	$router = new RouteList;
	$router[] = new Route('index.php', 'Front:Homepage:default', Route::ONE_WAY);
	# admin
	$router[] = $adminRouter = new RouteList('Admin');
	$adminRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');
	# front
	$router[] = $frontRouter = new RouteList('Front');
	$frontRouter[] = new Route('[<page>]', 'Front:default');
	$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
					Editoval PavelJurasek (4. 9. 2013 15:51)

- PavelJurasek
 - Člen | 39
 
Trochu jsem ten příklad upravil.
Druhá routa je tam jen jako fallback pro requesty, které nebudou odchyceny
první routou.