RoutingDebugger

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

Ahoj,
bezi mi Nette na verejne adrese. Zkousim zapnout RoutingDebugger, ale vyhazuje to chybu:

Notice: Indirect modification of overloaded property Template::$routers has no effect in /var/www/netflow.cesnet.cz/http/mgmt/app/RoutingDebugger/RoutingDebugger.php on line 87

Musel jsem nastavit development mod a to bud:

Environment::setMode(‚production‘,false);
nebo pres config.ini volbou
mode.production = FALSE

Pokud je Nette v development modu zobrazi se hlaska vyse, s tim, ze okno pro RouteDebugging
se zobrazi, ale nejsou v nem vypsany zadne routy, jen je videt ta ktera je „aktivni“.
Bezi mi to v PHP 5.2.0–8+etch16, Nette jsou zkousel jak stable, tak i posledni night build.

Nevite co s tim?

Diky,
Honza

Ondřej Mirtes
Člen | 1536
+
0
-

Tahle hláška je bug té verze PHP 5.2.0.

Nastane, když napíšeš něco takovéhleho:

$this->bar[] = 'foo';

Prostě začneš přistupovat k atributu třídy jako k poli, aniž bys ho předtím nějak inicializoval.

Řešením je před tím inkriminovaným řádkem 87 uvést něco takovéhleho:

$this->bar = array();
nejman
Člen | 13
+
0
-

Zkusil jsem nainstalovat RoutingDebugger 2 a tam je stejny problem, tentokrat na radce 127.

$this->template->routers[] = array( ‚matched‘ ⇒ $matched, …

Tedy jak pises, zapis do neinicializovaneho atributu.
Ale predtim v metode paint() je:

$this->template->routers = array();

Tedy atribut by mel byt inicialozavany. To prirazeni hodnot do templatu je az po te
inicializaci v metode paint(). Nemuze to byt necim jinym nebo nejake jine reseni?

Diky,
Honza

redhead
Člen | 1313
+
0
-

Pokud vím, tak u template takhle nikdy nešlo zasahovat, vždycky jsem musel udělat toto:

$array = array();
foreach(...) {
	$array[...] = ...;
}

$this->template->pole = $array;
Ondřej Mirtes
Člen | 1536
+
0
-

redhead: Jo, to je ten trik! :o) Já si to trochu spletl :)

nejman
Člen | 13
+
0
-

Ahoj,
moc diky za tipy. Uz jsem to nasel a opravil RoutingDebugger. Akceptuje David Grudl patche?
Asi by stalo za to zaktualizovat doplnek…

Vyresil jsem to pres novy atribut private $routers; ktery naplnim ve funknci analyze a
v metode paint se pak nastavi $this->template->routers=$this->routers;
Funguje bezvadne. Jeste jednou diky…

Honza

redhead
Člen | 1313
+
0
-

na druhou stranu, je divné že to nefunguje, protože podle mě všem RD doteď fungoval. Myslím, že i já sem ho jednou zkoušel (ale nejsem si jist) a šel. Divné