$this->template->setFile(‚file.phtml‘) deaktivuje nastavení layoutu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Tvrdík
Nette guru | 2595
+
0
-

Je nějaký důvod, aby volání $this->template->setFile('file.phtml') deaktivovalo nastavení layoutu?

Nebylo by logičtější upravit kód takto?:

if ($template instanceof /*Nette\Templates\*/IFileTemplate) {
    // content template
    if (!$template->getFile()) {
        $files = $this->formatTemplateFiles($this->getName(), $this->view);
        foreach ($files as $file) {
                if (is_file($file)) {
                        $template->setFile($file);
                        break;
                }
        }


        if (!$template->getFile()) {
                $file = str_replace(Environment::getVariable('templatesDir'), "\xE2\x80\xA6", reset($files));
                throw new BadRequestException("Page not found. Missing template '$file'.");
        }
    }

    // layout template
    if ($this->layout) {
            foreach ($this->formatLayoutTemplateFiles($this->getName(), $this->layout) as $file) {
                    if (is_file($file)) {
                            if ($this->oldLayoutMode) {
                                    $template->content = clone $template;
                                    $template->setFile($file);
                            } else {
                                    $template->layout = $template->_extends = $file;
                            }
                            break;
                    }
            }
    }
}
David Grudl
Nette Core | 8228
+
0
-

Když použiješ setFile, tak se předpokládá, že si soubor a layout řešíš nějak po svém.

Jan Tvrdík
Nette guru | 2595
+
0
-

Přesto si myslím, že mnou navrhnutá změna představuje logičtější chování, protože pakliže mám nastaveno $this->layout, tak očekávám, že bude fungovat. Pokud layout z nějakého důvodu nechci, tak můžu vždycky zavolat $this->layout = FALSE. Rozhodnutí je samozřejmě na tobě :)