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