JSifalda's blog

The simple way




Flame/Modules a chytřejší definice Nette rout

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))
    );
}

Shrnutí

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.

08.09.2013 at 18:12:34