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