BasePresenter – jeho dědění a registrace filtru
- maarlin
- Člen | 207
Zdravím,
začínám s Nette a řeším asi primitivní problém.
V mnoha textech tady na webu i v tutoriálech je popsáno použití
CurlyBrackets filtru.
Konkrétně vytvořením vlastního presenteru (BasePresenter), který bude
děděn všemi ostatními presentery.
Můj BasePresenter vypadá takto:
<?php
abstract class BasePresenter extends NPresenter
{
public function templatePrepareFilters($template)
{
parent::templatePrepareFilters($template);
$template = $this->createTemplate();
$this->template->registerFilter(new CurlyBracketsFilter);
}
}
?>
Můj výchozí presenter – DefaultPresenter takto:
<?php
require_once ('BasePresenter.php');
class DefaultPresenter extends /*Nette\Application\*/BasePresenter
{
public function renderDefault()
{
$this->template->pageTitle = "Hlavní strana";
}
public function renderTable()
{
$this->template->pageTitle = "Tabulka XYZ";
}
}
?>
V první řadě asi není správné vkládat via require_once ten samotný
soubor s BasePresenterem – jak to dělat jinak, když se sám neloaduje?
Mám ho inicializovat v bootstrapu?
V druhé řadě i přes existenci řádky
<?php $this->template->registerFilter(new CurlyBracketsFilter); ?>
nefunguje filtrování HTML šablon – např. {$pageTitle} zůstane
v původní podobě.
- Etch
- Člen | 403
Nechtěl bych kecat ale CurlyBracketsFilter se snad v aktuální verzi nette registruje automaticky.
ohledně require_once nevím jak to dělají ostatní, ale já například ro u BasePresenteru používám sice by ho načetl RobotLoader, ale s tím je spojená jistá režie. Tedy pokud vím že nějakou třídu budu na 100% potřebovat načtu jí pomocí reqire_once. Jinak pokud se chceš ro vyhnout tak použij RobotLoader tedy v bootstrapu třeba :
Editoval Etch (20. 8. 2009 23:52)
- Etch
- Člen | 403
Pokud překrýváš metodu templatePrepareFilters tak v ní registruj filtry takto :
Filter CurlyBrackets se registuje automaticky viz. API
//EDIT: také bych se vyvaroval v templatePrepareFilters
volání parent::templatePrepareFilters($template)
může pak
totiž nastat situace kdy někdo kdo nebude vědět, že se filter CurlyBrackets
registruje automaticky ho zaregistruje dvakrát tedy třeba takto:
$this->template->registerFilter(new CurlyBracketsFilter);
se dá použít například pokud by si filter chtěl registrovat ve
startup()
Editoval Etch (21. 8. 2009 0:58)
- maarlin
- Člen | 207
Etch napsal(a):
Nechtěl bych kecat ale CurlyBracketsFilter se snad v aktuální verzi nette registruje automaticky.
Znamená to tedy, že pokud nebudu vůbec řešit BasePresenter a nechám si
svůj výchozí (DefaultPresenter), který bude dědit NPresenter, pak by se
v phtml šablonách měly automaticky překládat patřičné
„ozávorkované“ výrazy na PHP kód?
Protože popravdě se mi tak neděje… :(
/app/presenters/DefaultPresenter.php
/app/templates/@layout.phtml
V prohlížeči zůstane zobrazeno {$pageTitle}, místo „Hlavní strana“.