FilterOut se volá i u neodpovídající routy?
- RiskyNet
- Člen | 20
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
Route::FILTER_OUT se volá už při definici routy, nad její defaultní hodnotou.