Routa směřuje jinam než bych chtěl

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

Zdravím,

narazil jsem na problém, který nevím jestli je problémem a nebo dělám něco špatně já. Mám moduly Front a Admin a v každém z nich mám DefaultPresenter.

Nastavení rout

$router[] = new Route('index.php', array(
	'lang' => 'en',
	'module' => 'Front',
	'presenter' => 'Default',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<lang>/admin/<presenter>/<action>/<id>', array(
	'lang' => 'en',
	'module' => 'Admin',
	'presenter' => 'Default',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('<lang>/<presenter>/<action>/<id>', array(
	'lang' => 'en',
	'module' => 'Front',
	'presenter' => 'Default',
	'action' => 'default',
	'id' => NULL,
));

Od toho bych očekával, že pokud přijdu na example.com dostanu se na Front:Default:default s výchozím jazykem angličtina.
Ale ne, Nette mě směřuje do modulu Admin, takže se nikdy nemám možnost dostat do presenteru Default v modulu Front, proč?

Co dělám špatně?

(PHP Version 5.3.2; Nette 0.9.5 stable ze dne 1. 7. 2010)

Děkuji za odpovědi

Editoval joe (20. 8. 2010 12:11)

bazo
Člen | 620
+
0
-

tak prehod tie dve routy. example.com vyhovuju obe tak sa vykona ta prva.

joe
Člen | 313
+
0
-

To jsem tam psal a pak jsem to umazal, měl jsem to tam nechat :-)

Protože pokud je prohodím, pak se nedostanu na admin, protože to bude hledat presenter admin, který je jenom v modulu Admin a ne ve Frontu.

joe
Člen | 313
+
0
-

Tak jak chci to funguje, jen pokud prohodím parametry v url

<lang>/admin/<presenter>/<action>/<id>

Takže to skoro vypadá, jakoby to testovalo jen první parametr a dál to nekoukalo.

Panda
Člen | 569
+
0
-
$router[] = new Route('<lang>/admin/<presenter>/<action>/<id>', array(
        'module' => 'Admin',
        'presenter' => 'Default',
        'action' => 'default',
        'id' => NULL,
));

Když je parametr lang volitelný, tak se jako volitelné označí i ten řetězec /admin/, co je za ním. Ono Ti to stejně nebude nijak vadit, protože pokud routa bude obsahovat ten /admin/, tak tam ten lang stejně musí být.

joe
Člen | 313
+
0
-

Panda napsal(a):

Ono Ti to stejně nebude nijak vadit, protože pokud routa bude obsahovat ten /admin/, tak tam ten lang stejně musí být.

OPRAVA: Tak jsem to měl přehozené, ale jak to tedy udělat, aby pokud když půjdu na example.com se načítalo z modulu Front a ne z modulu Admin. Chápu, že to teda není možné?

Editoval joe (20. 8. 2010 14:23)

Panda
Člen | 569
+
0
-

Jak přehozené? O přehazování parametrů jsem nenapsal ani slovo. Mluvil jsem o zrušení volitelnosti parametru lang, protože pokud je volitelný, je jako volitelný považovaný i řetězec /admin/ (protože je mezi volitelnými parametry <lang> a <presenter>).

joe
Člen | 313
+
0
-

Já to měl přehozené (ty dvě routy), dopsal jsem příspěvek a odeslal a pak jsem si toho všiml, tak jsem to opravil.
Aha, už tomu rozumím, tak díky za vysvětlení. ale pořád jsem nedošel k tomu, jak po zadání example.com se dostat do modulu Front – defaultní presenter.

Nebo nevím, jak mám udělat ty parametry, aby nebyly volitelné(?)

Díky moc za pomoc a trpělivost :-) Ještě jsem se s tím nesetkal a teprve teď jsem s tím měl problém.

Panda
Člen | 569
+
0
-

Jsem Ti to tam napsal, stačí neuvádět v poli, které předáváš jako druhý argument konstruktoru třídy Route, hodnotu pro daný parametr:

$router[] = new Route('<lang>/admin/<presenter>/<action>/<id>', array(
        'module' => 'Admin',
        'presenter' => 'Default',
        'action' => 'default',
        'id' => NULL,
));

//Doplnění: teda pardon, napsal jsem to jako kód, omlouvám se, pokud ta změna nebyla vidět.

Editoval Panda (20. 8. 2010 19:16)

joe
Člen | 313
+
0
-

Ahá, díky moc. Napsal jsi to tam, jenom jsem si toho nevšiml, tohle mi uniklo a taky už jsem zapomněl, že pokud to tam neuvedu, tak to není volitelné. Myslel jsem, že se tím nastavují výchozí hodnoty. Ještě jednou dík.