Jednosměrná routa závislá na GET parametrech?

- ic
 - Člen | 431
 
Dá se udělat aby ONE_WAY router se matchnul jen v případě,
že má ty správné GET parametry?
mám router
	$router[] = new Route('<path .+> ? md5 & expires', function ($presenter) {
		die('gg');
	}, Route::ONE_WAY);
kterému odpovídají adresy jako
web.tld/adresar/jinyAdresar/?md5=d7cb1c7d9fb8b279de1c96f89eb8e50b&expires=2147483647
ale i web.tld/adresar/jinyAdresar/
já bych potřeboval aby se matchnul pouze, pokud tam má GET parametry md5 a
expires , ale nevím jak na to :(
tohle by nějak mělo jít, ne?
případně ještě, může být router závislý na jiných než GET parametrech? REQUEST například?

- greeny
 - Člen | 405
 
Router:
new Route("<path .+>", [
	NULL => [
		Route::FILTER_IN => 'myInFunction',
	],
]);
Vlastní funkce / metody / lambda funkce (v routeru
myInFunction):
function myInFunction($arguments) { // $arguments jsou všechny argumenty routy
	$path = $arguments['path'];
	if(!checkPath($path)) { // ověření cesty (např z databáze, jestli existuje, apod.), pokud potřebuješ
		return NULL; // routa nematchne
	}
	if (!isset($arguments['md5']) || !isset($arguments['expires'])) {
		return NULL; // routa nematchne
	}
	return $arguments; // vrátím pole argumentů
}
Protože je to ONE_WAY, tak druhej směr nepotřebuješ. (ale možná kecám a potřebuješ OUT a ne IN, teď si nejsem jistej).
Princip je ten, že filtry uvedeš pod klíčem NULL a dostaneš celý pole argumentů. V té funkci vrátíš NULL pokud routa nemtachne a nebo pole argumentů (případně upravených, jak je potřeba).

- ic
 - Člen | 431
 
Vypadá to nadějně, ale routeru scházel presenter
takže jsem mírně upravil, abych vracel
return $arguments + array('presenter' => 'Nette:Micro');
jenže to mi zase přepisuje url adresu do podoby kterou pak už sežere
jiný
router web.tld?path=adresar&md5=e4Nc3iduzkWRm01TBBNYw&expires=2147483647
jak přepisování zabráním, nebo dělám něco špatně ?

- greeny
 - Člen | 405
 
Presenter si tam přidej do defaultních argumentů jako normálně :)
new Route("<path .+>", [
	"presenter" => "Nette:Micro",
    NULL => [
        Route::FILTER_IN => 'myInFunction',
    ],
]);
Pokud ti to sežere jiná routa, tak téhle dej větší prioritu (definuj dřív). Vzhledem k tomu, že v tom callbacku od filtru ověřuješ cestu i parametry a vracíš NULL, když to neprojde, tak by ti to nemělo dělat problémy s jinýma URLs.