route Frontpage s jedním parametrem anebo /admin

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

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

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

žádný nápad? :-(

David Matějka
Moderator | 6445
+
0
-

vytvor si AdminModule pro administraci

dnd
Člen | 16
+
0
-

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

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)

dnd
Člen | 16
+
0
-

PavelJurasek napsal(a):

Tak nějak by to mohlo vypadat.

Díky moc, vyzkoušim, ale bude to fungovat, když v tom Front budu mít jen <page> ?
Je nutné, aby front adresa měla žádný nebo jeden parametr

PavelJurasek
Člen | 39
+
0
-

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