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

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.

David Grudl
Nette Core | 8144
+
0
-

Nejlepší bude poslat příklad routy a URL.

Aurielle
Člen | 1281
+
0
-

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…