Služba TemplateLocator: TODO
- Honza Marek
- Člen | 1664
Pokud chci upravit způsob jak hledat šablony pro layout či view, je potřeba v presenteru překrýt několik protected metod. Tento způsob ale vůbec není znovupoužitelný, protože nejde vyčlenit do nějaké třídy, kterou bych mohl později jednoduše použít.
Tyto metody by tedy měly být součástí nějakého interfacu ITemplateLocator, který by implementovala služba dostupná a vyměnitelná v DIC.
Nemáte někdo chuť to implementovat?
- David Grudl
- Nette Core | 8227
Jde konkrétně o dvě public metody formatLayoutTemplateFiles() a formatTemplateFiles(). Proč by to nešlo vyčlenit do nějaké třídy?
function formatLayoutTemplateFiles()
{
return $locator->formatLayoutTemplateFiles();
}
- Honza Marek
- Člen | 1664
Ano, můžeš si udělat třídu. Ale nezbaví tě to nutnosti přepisovat v každém projektu v BasePresenteru ty format metody. Tady pomůže jedině trait :)
- mishak
- Člen | 94
rixxi/template-locator připomínky a pull requesty uvítám (kód funguje na nette @dev)
Případné testy a readme udělám někdy koncem týdne.
extensions:
templateLocator: Rixxi\Templating\DI\TemplateLocator
templateLocator:
class: detect|default|priority|<class> # default detect
directories: # default []
- %appDir%
# nebo alternativně - NETESTOVANO, NEJSPÍŠ NEFUNGUJE - vyžaduje menší úpravu
"%appDir%": 9000
"%appDir%/../vendor/x/y/src": 100
cache: on|off # default off
cacheExistingFilesOnly: on|off # default off
class Presenter ... {
use \Rixxi\Templating\DI\Presenter\TemplateLocator; # přepíše fce pro hledání šablon
...
class:
detect
pokud jsou directories prázdné a žádný extension nepřidá adresáře zvolídefault
jinakpriority
default
identický kód s nette@dev přepsaný do vlastní třídypriority
kód podobnýdefault
, prochází všechny definované adresáře (výchozí je připojen nakonec – nejnišší) podle priority od nejvižší po nejnižší pro jednotlivých úrovních (první top level, pak rodiče všech atd.).
directories:
Má smysl jen pro class detect
a priority
.
Obsahuje seznam adresářů (všem bude přiřazena priorita
PHP_INT_MAX
) nebo jejich mapu
[ 'dir' => <priority> ]
.
Adresáři jsou root adresáře pro templaty (většinou na stejné úrovni jako
složka presenters)
cache:
Zvolený class
bude cachovat. Cache se automaticky vymaže při
změně konfigurace sekce templateLocator.
cacheExistingFilesOnly:
Má smysl jen s cache: on
.
Vyfiltruje neexistující soubory ze seznamu. Experimentální jako
optimalizace, pokud bude plno adresářů s šablonami.
Rozšířitelnost
Rozšíření hledá ostatní rozšíření implementující
ITemplateLocatorDirectoryProvider.
Rozšíření na komponenty je zatím v teoretické fázi.
Editoval mishak (22. 7. 2013 23:06)