Parametrizovana routa, usporny URL managment

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

Vo vedlajsom vlakne sa riesi routovanie, tak aby routa nemusela explicitne v maske obsahovat Presenter.

V YII frameworku mame taku skvelu vec – parametrizovane routry. V skratke, umoznuje to spravit takutu vec:

'rules'=>array(
    '<_c:(dashboard)>/<action:\w+>/<id:\d+>' => '<_c>/<action>',
    '<_c:(dashboard)>/<action:\w+>'          => '<_c>/<action>'
    '<_c:(dashboard)>'                       => '<_c>/index'
    '<action:\w+>/<id:\d+>'                  => 'site/<action>',
    '<action:\w+>'                           => 'site/<action>',
    ''                                       => 'site/index',
),
URL request
/foo SiteController::actionFoo()
/foo/5 SiteController::actionFoo(5)
/bar SiteController::actionBar()
/dashboard DashboardController::actionIndex()
/dashboard/foo DashboardController::actionFoo()
/dashboard/bar/5 DashboardController::actionBar(5)

Cize cokolvek okrem dashboard co je v REQUERST_URI, sa matchne ako akcia defaultneho Controllera. Ak sa na tam objavi dashboard, bude tento param brani ako nazov Controllera. Je mozne nastavit aj vycet:

'<_c:(dashboard|gallery|users)>/<action:\w+>/<id:\d+>' => '<_c>/<action>',

Pride mi to ako celkom pekny sposob usporneho URL managmentu, pri minime rout. Mame taketo nieco v Nette?

Patrik Votoček
Člen | 2221
+
0
-

teoreticky by mohlo fungovat:

$router[] = new Route('[<presenter (dashboard|gallery|users)>]/<action>[/<id>]', 'Homepage:default');

netestoval jsem

Filip Procházka
Moderator | 4668
+
0
-

Ekvivalentem by mělo být zhruba toto:

$router[] = new Route('/[<presenter>/]<action>[/<id [0-9]+>]', array(
	'presenter' => 'Site',
	'action' => 'index',
	'id' => NULL,
));

Pokud chceš ještě limitovat presentery, dá se to udělat jak říká Patrik, <presenter (dashboard|gallery|users)>, ale to mi příjde jako (sice efektivnější) ale méně ohebné řešení. Využil bych spíše Route::FILTER_IN a Route::FILTER_OUT. viz https://doc.nette.org/…tion/routing#…

Editoval HosipLan (17. 3. 2011 8:05)