Flame/Modules doplňují svoji chybějící funkcionalitu - nyní je možné definovat vlastní RouteList pro daný Nette modul.
Doposud bylo možné definovat pouze jednotlivé routy a to ve formě polí (array hell). To ovšem nestačilo některým složitějším aplikacím a náročnějším vývojářům. (Mimochodem, Jiřímu děkuji za komentář a podmět k vylepšení.)
Z prvu se zdála myšlenka definice vlastního RouteListu nemyslitelná. Nehledě na to, že konfigurační pole by příliš narostlo a stalo se tak nepřehledným.
Po vytvoření třídy RouteMock a upravením několika řádků ve třídě RouterFactory to však už nebyl problém.
Proč nelze vracet přímo objekt třídy Nette Route se dočtete v článku Nette moduly (a vlastní instalátor) #3
Nyní tedy může vypadat implementace IRouterProvideru následovně:
function getRoutesDefinition()
{
$list = new NetteRouteListMock('App');
$list[] = new NetteRouteMock('/', array(
'module' => 'Enlan',
'presenter' => 'Homepage',
'action' => 'default'
));
$list[] = new RouteMock('AdamStipak\RestRoute', array('Api:V1', 'json', true));
return array($list);
}
nebo bez RouteListu
function getRoutesDefinition()
{
return array(new NetteRouteMock('/', array(
'module' => 'Enlan',
'presenter' => 'Homepage',
'action' => 'default'
)),
new RouteMock('AdamStipak\RestRoute', array('Api:V1', 'json', true))
);
}
Zůstává zachována konfigurace pomocí polí a přibyla konfigurace pomocí Route mocků, které simulují původní Nette Route, RouteList nebo jakýkoliv jiný IRouter.
Jsem si vědom toho, že ani toto řešení není ideální. Jakákoliv lepší řešení uvítám v komentářích.