Získání jiného parametru v Route::FILTER_OUT
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ajda2
- Člen | 66
Dobrý den,
mám vytvořenou vlastní vícejazyčnou PageRoutu. Více poví tento kód:
<?php
$pageRoute = new FrontModule\PageModule\PageRoute( '[<lang=' . $defaultLang . ' [a-z]{2}>/][<node>/]<id>', array(
'module' => 'Page',
'presenter' => 'Page',
'action' => 'show',
'node' => array(
Route::PATTERN => '.*'
),
'id' => array(
Route::FILTER_OUT => function ($id) use ($container) {
if (!is_numeric($id)) {
return $id;
}
else {
$pageModel = $container->pageModel;
return $pageModel->getPageUrl($id, \FrontModule\PageModule\PageRoute::$langId);
}
}
)
) );
?>
V metodě FILTER_OUT pro parametr ID vracím URL stránky v patřičném
jazyce a zde je kámen úrazu. Jazyk totiž nyní nastavuji v Routě do
statické proměnné v metodě match. Ve FILTER_OUT si jej pak vytáhnu.
Použití statické proměnné se mi vůbec nezamlouvá.
Nejde nějak v metodě FILTER_OUT pro parametr ID získat parametr LANG
z aktuálního požadavku, respektive z aktuální URL?
Předem děkuji za pomoc a rady.
- Jan Suchánek
- Člen | 404
ajda2: Tadyk dostaneš všechny parametry:
$route = new Route('[<lang [cs|en|de]{2} >/]<presenter>[/<action>][/<id [0-9]+>]', array(
NULL => array(
Route::FILTER_IN => array($this->routerModel, 'filterIn'),
Route::FILTER_OUT => array($this->routerModel, 'filterOut'),
),
'lang' => 'cs',
'presenter' => 'Default',
'action' => 'default',
'id' => NULL,
));
Editoval jenicek (25. 2. 2014 11:36)
- ajda2
- Člen | 66
jenicek napsal(a):
ajda2: Tadyk dostaneš všechny parametry:
$route = new Route('[<lang [cs|en|de]{2} >/]<presenter>[/<action>][/<id [0-9]+>]', array( NULL => array( Route::FILTER_IN => array($this->routerModel, 'filterIn'), Route::FILTER_OUT => array($this->routerModel, 'filterOut'), ), 'lang' => 'cs', 'presenter' => 'Default', 'action' => 'default', 'id' => NULL, ));
Jen chci doplnit, že toto opravdu funguje. Děkuji za radu :-)