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.