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

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

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)
macesko
Člen | 12
+
0
-

Dobry den,

haze to chybu:

Service ‚router‘: Reference to missing service ‚front.routerFactory::createRouter‘

Zkousel jsem ruzne kombinace, ale nevim co s tim.
Nejake napady?

enumag
Člen | 2118
+
0
-

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)

macesko
Člen | 12
+
0
-

Ted je chyba:

Nette\OutOfRangeException – Offset invalid or out of range

macesko
Člen | 12
+
0
-

Tak jsem to vyresil, ze misto cisel jsem zadal null a funguje to.

Moc dekuji za pomoc.

Editoval macesko (6. 3. 2013 20:17)