Změna routeru v MyApplication->run

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
chikeet
Člen | 160
+
0
-

Zdravím,
mám vlastní třídu pro aplikaci MyApplication a vlastní třídu pro router MyRouter. V MyApplication->run() se načítají moduly. Jeden z nich používá MyRouter a pokud se tento modul v aplikaci používá, potřebuju vyměnit defaultní router za MyRouter. Problém:

  • když použiju
$router = $this->container->routerFactory->createAcmsMultiLanguageRouter();
$this->container->removeService('router');
$this->container->addService('router', $router);

je v MyApplication->router pořád defaultní router.

  • když přidám třídě MyApplication metodu setRouter a po změně routeru ho aplikaci tímto způsobem vnutím, je v MyApplication->router instance třídy MyRouter, ale v Application->router je pořád defaultní router.

Existuje nějaký rozummý způsob, jak tohle řešit? Do třídy Application zasahovat nechci, pokud to nebude nevyhnutelně nutné.

David Matějka
Moderator | 6445
+
0
-

vytvor si jeste jeden router… ted me nenapada zadnej nazev… :) no proste takhle:

class FooRouter extends Nette\Object implements Nette\Application\IRouter
{
	/**
	* @var Nette\Application\IRouter
	*/
	protected $router;

	public function setRouter(Nette\Application\IRouter $router)
	{
		$this->router = $router;
	}

	function match(Nette\Http\IRequest $httpRequest)
	{
		return $this->router->match($httpRequest);
	}
	function constructUrl(Nette\Application\Request $appRequest, Nette\Http\Url $refUrl)
	{
		return $this->router->constructUrl($appRequest, $refUrl);
	}

}

ten registruj jako router sluzbu a pres ->setRouter mu nastav, co ted mas registrovano jako router sluzbu :)

v application to vymenis zas pres ->setRouter

chikeet
Člen | 160
+
0
-

Ahá… Tohle mě fakt nenapadlo, díky!