Vlastní CacheStorage (i pro RobotLoader)
- Pavel S.
- Člen | 24
V aplikaci běžící na Nette 0.9 mám vlastní implementaci ICacheStorage (APCStorage), kterou používám pro ukládání svých dat. Chtěl jsem ji zaregistrovat jako službu Nette\ServiceLocatoru, aby se používala i pro kešování v RobotLoaderu a pro Latte šablony.
Přidal jsem do config.ini tento řádek:
service.Nette-Caching-ICacheStorage = APCStorage
Při kontrolním výpisu při startu aplikace je v ServiceLocatoru načtena správná hodnota:
"nette\caching\icachestorage" => array(3) [
0 => "APCStorage" (29)
1 => TRUE
2 => NULL
]
Problém je, že RobotLoader si zřejmě při startu aplikace chce uložit data do mé storage, kterou ale ještě nenalezl. Pokud zapnu laděnku, dostanu tuto chybu:
Nette\AmbiguousServiceException
Cannot instantiate service 'Nette\Caching\ICacheStorage', class 'APCStorage' not found.
Poradíte někdo, co s tím? Jak mám správně zaregistrovat cache storage, aby ji respektoval a správně použil i RobotLoader? Předem díky.
Editoval Pavel S. (9. 7. 2012 17:57)
- Pavel S.
- Člen | 24
llook napsal(a):
Před registrací RobotLoadera použij require_once na tu tvoji třídu.
Díky, pomohlo. Ještě teď řeším, že mou cache nepoužívá šablonovací systém, i když je zaregistrovaná v configu. Víte někdo, co s tím? Kde se nastavuje, která cache se bude používat na ukládání šablon?
- Filip Procházka
- Moderator | 4668
Dúrazně nedoporučuji měnit cache pro šablony. Velice důrazně.
Nic tím nezískáš, jen problémy. Věř mi.
Editoval HosipLan (10. 7. 2012 11:10)
- Filip Procházka
- Moderator | 4668
Ani né nebezpečné, ale nevýhodné. PhpFileStorage
vytváří
„živé“ soubory, které pak Template
může includovat. Pokud
máš na serveru nějakou opcode cache, bude to velice rychlé.
Když ale storage změníš, tak se bude šablona vždy evalovat. A eval, jak všichni víme, je zlo a navíc ti to nikdy neukáže zkompilovaný kód šablony v laděnce, protože to není možné. S evalem jsou pak ještě další hnusné problémy. Věř mi, tohle nechceš :)
Editoval HosipLan (10. 7. 2012 14:00)
- Filip Procházka
- Moderator | 4668
Mezi fileStorage a memcached storage neni vpodstatě rozdíl. Ale šablony používají Nette\Caching\Storages\PhpFileStorage. Tato storage vytváží „živé“ soubory, které pak šablony includují → je to rychlejší.