Optimatizace rout v aplikaci

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

Ahoj mám tyhle tři routy a chtěl bych se zeptat, zda je možné je optimalizovat do jedné. S Nette začínám, ale ihned jsem se stal jeho fanouskem. :) Aplikace již běží a teď optimalizuju a čistím její kód.

<?php
//pro adresy : /cs/online-hry/skakacky/super-mario
$router[] = $route = new Route('<lang [a-z]{2}>/<section>/<category>/<game>', array(
    'presenter' => 'Games',
    'action' => 'game'
));

//pro adresy : /cs/online-hry/skakacky
$router[] = $route = new Route('<lang [a-z]{2}>/<section>/<category>', array(
    'presenter' => 'Games',
    'action' => 'category'
));

//pro adresy : /cs/online-hry
$router[] = $route = new Route('<lang [a-z]{2}>/<section>', array(
    'presenter' => 'Games',
    'action' => 'default'
));
?>

Děkuju za odpovědi.

MartinitCZ
Člen | 580
+
0
-

Zkus toto:

$router[] = $route = new Route('<lang [a-z]{2}>/<section>[/<category>][/<game>]', 'Games:default');
Tomáš Pilař
Člen | 14
+
0
-

martinit napsal(a):

Zkus toto:

$router[] = $route = new Route('<lang [a-z]{2}>/<section>[/<category>][/<game>]', 'Games:default');

Takhle jsem to už zkoušel i dřív, problém je že potřebuju rozlišovat <action>, ale v adrese ji nechci, proto mam 3 routy a v každá se liší hodnotou <action>.
Teď mě možná napadlo řešení, ale nevím jestli je dobré kvůli optimalizaci. Dal bych routu, kterou jsi mi poslal a v metodě renderDefault, bych podle nastavenych parametru z adresy volal renderCategory(), renderGame() atd…?

David Matějka
Moderator | 6445
+
0
-

mohlo by jit zmenit action ve filtru (snad pouzivas nette 2.1)

$route = new Route('<lang [a-z]{2}>/<section>[/<category>][/<game>]', array(
	"presenter" => "Game",
	NULL => array(
		Route::FILTER_IN => function($params) {
			if($params['game']) {
				$params['action'] = 'game';
			} elseif($params['category']) {
				$params['action'] = 'category';
			} else {
				$params['action'] = 'default';
			}

			return $params;

		}
	),
));

Editoval matej21 (4. 3. 2014 18:59)

Tomáš Pilař
Člen | 14
+
0
-

matej21 napsal(a):

mohlo by jit zmenit action ve filtru (snad pouzivas nette 2.1)

$route = new Route('<lang [a-z]{2}>/<section>[/<category>][/<game>]', array(
	"presenter" => "Game",
	NULL => array(
		Route::FILTER_IN = function($params) {
			if($params['game']) {
				$params['action'] = 'game';
			} elseif($params['category']) {
				$params['action'] = 'category';
			} else {
				$params['action'] = 'default';
			}

			return $params;

		}
	),
));

jj používám,
routa je funkční, jen mi to teď cpe do adres ?action=default, ?action=category, atd… šlo by ještě tohle z nich odstranit? díky

David Matějka
Moderator | 6445
+
0
-

zkus pridat jeste FILTER_OUT pro action, ktery ho vzdycky zahodi, nejak takhle:

array(
..
"action" => array(
	Route::FILTER_OUT = function() {
		return NULL;
	}
)
)
Tomáš Pilař
Člen | 14
+
0
-

matej21 napsal(a):

zkus pridat jeste FILTER_OUT pro action, ktery ho vzdycky zahodi, nejak takhle:

array(
..
"action" => array(
	Route::FILTER_OUT = function() {
		return NULL;
	}
)
)

Dokonalé!
Děkuju