Route – pomocí FILTER_IN nelze odmítnout aktuální routu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Aurielle
- Člen | 1281
Route pochází z nejnovějšího commitu na GH, testováno i na Route z alphy2. Jedná se o podmínku
elseif (isset($meta[self::FILTER_IN])) { // applyies filterIn only to scalar parameters
$params[$name] = call_user_func($meta[self::FILTER_IN], (string) $params[$name]);
if ($params[$name] === NULL && !isset($meta['fixity'])) {
return NULL; // rejected by filter
}
}
Fixity je nastavená vždy, když je nastavený FILTER_IN, protože bez ohledu na metodu přidání se v setMask přidá do metadat aktuálního stylu a nastaví se mu fixity. Proto se podmínka přeskočí a jede se dál, a v případě aplikace filtru na module nebo presenter pak matchování končí na InvalidStateException – missing module in route definition.
- Aurielle
- Člen | 1281
Poslední testovaná je:
Route::addStyle('#adminmodule');
Route::setStyleProperty('#adminmodule', Route::FILTER_IN, function($module) {
return (Nette\String::startsWith($module, 'admin') ? $module : NULL);
});
$router[] = new Route('//admin.[!<domain>]/'/* . '[!<lang>/]'*/ . '[<module #adminmodule>/]<presenter>/<action>/<id>', array(
'presenter' => 'Admin:Dashboard',
'action' => 'default',
'lang' => Nette\Environment::getVariable('lang'),
'id' => NULL,
));
Když přes FILTER_IN vrátím NULL, tak dostanu InvalidStateException…