Route: metadata jako string nebo jako pole
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- stekycz
- Člen | 152
Řešil jsem teď v Nette 2.0.10, proč mě při přístupu na „/“ Nette přesměruje na „/admin/front.homepage“ při následující definici.
$router = new RouteList();
$router[] = new Route('index<? \.html?|\.php|>', 'Front:Homepage:default', Route::ONE_WAY);
$router[] = new Route('admin/<presenter>/<action>[/<id>]', 'Admin:Default:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:default');
Čekal jsem, že zůstanu na „/“ a zobrazí se obsah z webové homepage. Ten se tedy zobrazil, ale na výše uvedené URL.
Nakonec jsem to vyřešil tím, že jsem jako metadata použil pole namísto řetězce, takže výsledek vypadá takto:
$router[] = new Route('index<? \.html?|\.php|>', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
), Route::ONE_WAY);
$router[] = new Route('admin/<presenter>/<action>[/<id>]', array(
'module' => 'Admin',
'presenter' => 'Default',
'action' => 'default',
));
$router[] = new Route('<presenter>/<action>[/<id>]', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
));
Proč Nette nerozpoznalo v původní definici modul? Navíc proč to přesměrovalo na tak divnou URL? Je to bug nebo je to feature? Pokud feature, tak proč to tak funguje?
PS: Když jsem dal před „Front“ a „Admin“ do definice dvojtečku, tak jsem dostal výjimku, že tam ta dvojtečka nemá co dělat.
- PavelJurasek
- Člen | 39
$router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = new Route('index<? \.html?|\.php|>', 'Homepage:default', Route::ONE_WAY); // tady už modul nepíšeš
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Default:default');
Kód snad řekne víc než tisíc slov.
Případně API: https://api.nette.org/…ute.php.html#125