Router class pro moduly – definovani pro service
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- macesko
- Člen | 12
Chtel bych vyuzivat moduly a vsechny vyhody s tim spojene, spolu s nastavenim v config.neon. Muzete poradit nekdo jak na to?
zatim je v config.neon toto:
services:
routerFactory: RouterFactory
router: @routerFactory::createRouter
RouterFacory.php
class RouterFactory
{
/**
* @return Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = $generatorRouter = new RouteList('Admin');
$generatorRouter[] = new Route('admin/<presenter>/<action>', 'Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
}
Jak to tedy obecne udelat tak, abych mel pro kazdy modul vlastni routerFactory a vse dal dohromady pouze v config.neon?
- enumag
- Člen | 2118
Myslím že by to mohlo jít nějak takto:
services:
front.routerFactory: FrontModule\RouterFactory
admin.routerFactory: AdminModule\RouterFactory
router:
class: Nette\Application\Routers\RouteList
setup:
- offsetSet(0, @front.routerFactory::createRouter)
- offsetSet(1, @admin.routerFactory::createRouter)
- enumag
- Člen | 2118
No… takhle složitěji to půjde skoro určitě, nevím zda existuje jednodušší zápis.
services:
front.routerFactory: FrontModule\RouterFactory
admin.routerFactory: AdminModule\RouterFactory
front.router: @front.routerFactory::createRouter
admin.router: @admin.routerFactory::createRouter
router:
class: Nette\Application\Routers\RouteList
setup:
- offsetSet(0, @front.router)
- offsetSet(1, @admin.router)
EDIT: Možná bude ještě potřeba zakázat autowiring.
services:
front.router:
create: @front.routerFactory::createRouter
autowired: false
admin.router:
create: @admin.routerFactory::createRouter
autowired: false
Editoval enumag (6. 3. 2013 0:34)