Inject Nette\Caching\Cache v Nette 2.1
- Honza Marek
- Člen | 1664
Problém: Potřebuju do servisy dostat instanci cache.
Pokud vim, kdysi v Nette byla v Nette factory na cache. Ovšem nikoliv jako servisa, ale jako metoda na contextu. Pokud jsem tedy chtěl vytvořit instanci cache, musel jsem mít context.
Změnilo se něco? Jsou v nette ještě vůbec ty factories? (Pokud se někomu zdá, že jsem poslední dobou trochu zaspal vývoj Nette, tak to možná bude pravda ;) )
- Pavel Macháň
- Člen | 282
Honza Marek napsal(a):
Problém: Potřebuju do servisy dostat instanci cache.
Pokud vim, kdysi v Nette byla v Nette factory na cache. Ovšem nikoliv jako servisa, ale jako metoda na contextu. Pokud jsem tedy chtěl vytvořit instanci cache, musel jsem mít context.
Změnilo se něco? Jsou v nette ještě vůbec ty factories? (Pokud se někomu zdá, že jsem poslední dobou trochu zaspal vývoj Nette, tak to možná bude pravda ;) )
Třeba
class Cokoliv {
/** @var \Nette\Caching\Cache */
private $cache;
public function __construct(Nette\Caching\IStorage $storage) {
$this->cache= new Cache($storage);
}
}
Editoval EIFEL (27. 1. 2014 16:22)
- Honza Marek
- Člen | 1664
Nevím jak souvisí Session s tím, co jsem psal. Nicméně když zkusím prostě autowirovat Cache, tak to neprojde, protože má autowire nastaveno na ne.
- Pavel Macháň
- Člen | 282
Honza Marek napsal(a):
Nevím jak souvisí Session s tím, co jsem psal. Nicméně když zkusím prostě autowirovat Cache, tak to neprojde, protože má autowire nastaveno na ne.
Jo promin sem se prehlidnul :) No mužeš si tam třeba injectnout Nette\Caching\IStorage a v konstruktoru vytvorit z toho cache
EDIT: upravil sem predchozi post
Editoval EIFEL (27. 1. 2014 16:24)
- Pavel Macháň
- Člen | 282
Myslím, že by to mělo jít i nastavit ručně v konfigu přímo na Cache
services:
- Cokoliv(\Nette\Caching\Cache(@cacheStorage))
Ale ruku do ohně za to nedam
Editoval EIFEL (27. 1. 2014 16:29)
- Jan Tvrdík
- Nette guru | 2595
Jo, to by mělo fungovat. Většinou je dobré uvést rovnou namespace.
services:
- MyService(Nette\Caching\Cache(@cacheStorage, cacheNamespace))
nebo
services:
- MyService(Nette\Caching\Cache(..., cacheNamespace))
- Pavel Kouřil
- Člen | 128
Tipl bych si, že ten důvod bude, že továrny v 2.0 celkově byly k ničemu (nešly autowirovat).