Nastavení vlastního routeru
- Teyras
- Člen | 81
Zdravím,
je nějak možné nastavit si vlastní třídu pro Router? Podle
Configurator.php:306 (GIT verze z 13.5.2011) to tak nevypadá, RouteList
vypadá, že je tam natvrdo, editací configu tím pádem taky ničeho
nedosáhnu. Pokud ta možnost byla odstraněna, proč?
Díky.
Editoval Teyras (13. 5. 2011 22:19)
- kravčo
- Člen | 721
Pred pár dňami zmizla metóda setRouter(), ktorou to išlo.
V podstate to ale nie je nutné, pretože (a)
$app->setRouter($myRouter);
a (b)
$app->router[] = $myRouter;
by mali byť funkčne ekvivalentné.
Rozdiel je v tom, že pri (a) routuje tvoj vlastný router a pri (b) routuje
RouteList
postupne routrami zo svojho zoznamu, ktorý obsahuje
jednu položku – tvoj router.
- Filip Procházka
- Moderator | 4668
Neřekl bych, že „obcházení“ je vhodný výraz, protože router je
přesně na tohle stavěný. Krapet nepříjemnější je, pokud má člověk
vlastní router a instance RouteList
mu přijde zbytečná :)
- Ondřej Mirtes
- Člen | 1536
Tahle část frameworku zrovna teď prochází bouřlivým vývojem a tohle (doufám) není finální stav. Používání aktuálního masteru s sebou nese tahle rizika.
- Filip Procházka
- Moderator | 4668
Tak fajn, já to teda napíšu ještě jednou…
Vytvoříš si vlastní configurator
class MyConfigurator extends Nette\Configurator
{
/**
* @return Nette\Application\Application
*/
public static function createApplication(DI\IContainer $container, array $options = NULL)
{
// stačí nahradit službu, její instance se ještě nevytvořila
$application = parent::createApplication($container, $options);
// nahradit router
$application->context->removeService('router');
$application->context->addService('router', 'MyÜberCoolRouter');
return $application;
}
}
Je vhodné nový configurator nastavit jako výchozí, protože si tam
určitě budeš chtít přidat další továrničky.
Soubor app/bootstrap.php
Environment::setConfigurator(new MyConfigurator);
Environment::loadConfig(); // ano správně, configurátor je potřeba nahradit, před načtením configu
Tak a teď si můžeš nastavit, aby se služby vytvářela novou továrničkou
common:
...
service:
...
application: MyConfigurator::createApplication
...
Voala, máš vlastní router v application