$router->setRouter hlasí že už existuje, v defaultServices u Application změna nepomaha

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

ať dělám co dělám router nezměním???

mcmatak
Člen | 504
+
0
-
<?php
$application = Environment::getApplication();
$application->getServiceLocator()->removeService('Nette\\Application\\IRouter');
$application->getServiceLocator()->addService('Nette\\Application\\IRouter', 'Solis\Application\MultiRouter');
$router = $application->getRouter();

?>

no neni moc hezke

na1k
Člen | 288
+
0
-

Pro vlastní implementace services můžeš použít config :)

mcmatak
Člen | 504
+
0
-

zkoušel jsem, nepomohlo :(

<?php

[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
; no more in nette 1.0
php.iconv.internal_encoding = "UTF-8"
; no more in nette 1.0
php.mbstring.internal_encoding = "UTF-8"
;php.default_charset = "UTF-8"

service.Nette-Application-IRouter = "\Solis\Application\MultiRouter"
?>

co jsem na tom napsal spatne?

nicmene fce setRouter, sem nepochopil, podle mne neexistuje okamžik kdy se dá použít!

Majkl578
Moderator | 1364
+
0
-

na1k napsal(a):

Pro vlastní implementace services můžeš použít config :)

Ne pro podslužbu Nette\Application\Application.

Mělo by to jít při změně výchozí služby v Application::$defaultServices před získáním instance routeru v boostrapu ($application->getRouter()).

mcmatak
Člen | 504
+
0
-

1. config nefunguje, vyzkoušeno, možná něco dělám špatně, ale jak to dělám to vidíte

Majkl578 napsal(a):

na1k napsal(a):

Pro vlastní implementace services můžeš použít config :)

Ne pro podslužbu Nette\Application\Application.

2. setRouter nemá smysl z toho důvodu, že nelze změnit service, který už existuje, a service IRouter se vytváří automaticky při získání ServiceLocatoru, tedy setRouter se domnívám, že neexistuje místo, kde ho lze použít aniž by to vyvolalo chybu (proste service bude vytvořen dříve)

Mělo by to jít při změně výchozí služby v Application::$defaultServices před získáním instance routeru v boostrapu ($application->getRouter()).

defaultServices není statické pole

<?php
$application = Environment::getApplication();
$application->defaultServices['Nette\Application\IRouter'] = 'Solis\Application\MultiRouter';
$router = $application->getRouter();
?>

jsem přesvědčený, že jsem tohle zkoušel, ale jestli jsem se zase nespletl tak by to mělo fungovat