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