FilterOut se volá i u neodpovídající routy?

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

Zdravím komunitu, mohl by mi někdo osvětlit chování filtrů u rout? Narazil jsem na věc která mi logicky nedává moc smysl a zřejmě mi něco uniká. Jde o to, že se u routy, která očekává konkrétní URL volá FILTER_IN/FILTER_OUT a FILTER_OUT se provádí i v případě, že daná URL nebyla zadána (přistupuji do „rootu“ tedy ../nette/sandbox/www/) a nikde se nevolá plink na Presenter:action (v tomto případě Articles:default).

Zkusili jsme to na čistém sandboxu s routami viz níže, Nette 2.0 s PHP 5.3.6

$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route( '/clanky/[<slug>/]', array(
    'presenter' => 'Articles',
    'action' => 'default',
    'slug' => array(
        Route::VALUE => NULL,
        Route::FILTER_IN => function(){
            \Nette\Diagnostics\Debugger::dump('IN');
            return NULL;
        },
        Route::FILTER_OUT => function(){
            \Nette\Diagnostics\Debugger::dump('OUT');
            return NULL;
        },
    ),
));
$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

Očekával bych, že se dané filtry provádí při „match“ URL adres, tedy když zavolám /clanky/ nebo /clanky/cokoli/ případně když generuju odkaz, ale ne že se prochází i v případě, kdy by vůbec neměly.

Takže prosím, minul/nepochopil jsem něco?

David Grudl
Nette Core | 8218
+
0
-

Route::FILTER_OUT se volá už při definici routy, nad její defaultní hodnotou.