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

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