Optimatizace rout v aplikaci
- Tomáš Pilař
- Člen | 14
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
Zkus toto:
$router[] = $route = new Route('<lang [a-z]{2}>/<section>[/<category>][/<game>]', 'Games:default');
- Tomáš Pilař
- Člen | 14
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
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
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
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
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