Inject Nette\Caching\Cache v Nette 2.1

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Honza Marek
Člen | 1664
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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))
Honza Marek
Člen | 1664
+
0
-

A ta továrnička na to v Nette už není nebo jen nejde použít?

Jan Tvrdík
Nette guru | 2595
+
0
-

Je deprecated, k ničemu nebyla.

arron
Člen | 464
+
0
-

Proč by byla k ničemu?

Pavel Kouřil
Člen | 128
+
0
-

Tipl bych si, že ten důvod bude, že továrny v 2.0 celkově byly k ničemu (nešly autowirovat).