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
+
0
-

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
+
0
-

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
+
0
-

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 :-)

Jan Suchánek
Člen | 404
+
0
-

@ajda2: Taky můžeš použít jen

	$this->routerModel->filterIn