getTemplate() v konstruktoru presenteru

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

Zdravím, při migraci se mi vyskytl problém: Mám třídu BasePresenter, ze které dědí všechny další presentery a v jejím konstruktoru předávám nějaké proměnné šabloně:

<?php
class BasePresenter extends NPresenter{

    public function  __construct(IComponentContainer $parent = NULL, $name = NULL) {
        $t = $this->getTemplate();
        $t->staticPath = (!empty($_SERVER["HTTPS"]) ? "https" : "http") . "://" . NEnvironment::getVariable("staticServer", "www.aragorn.cz");
        parent::__construct($parent, $name);
    }

...
?>

V ve verzi 2.0-alpha fungoval tento kód bez problémů, ale při migraci do 2.0-beta mi Laděnka hlásí problém: Trying to get property of non-object na řádku s getTemplate(). Netuší někdo, v čem by mohla být chyba? Pro jistotu přidávám i výpis z laděnky

Filip Procházka
Moderator | 4668
+
0
-

Problém je zcela zřejmý

$template->setCacheStorage($presenter->getContext()->templateCacheStorage);

V konstruktoru zkrátka nemůžeš přistupovat ke službám, protože kontext se předává presenteru, až po jeho vytvoření. Tvůj kód by proto měl být v metodě startup, nikoliv __construct. Na tu by jsi, pokud možno, neměl vůbec sahat.

Buri
Člen | 15
+
0
-

Díky, problém vyřešen.