Injecting Cache (Memcache)

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

Ahoj, chtěl jsem si vytvořit service, která má následující konstruktor:
<?php public function __construct(\Nette\Caching\Cache $cache, $runAll = false) ?>

Nicméně je prý tato service cache deprecated. Podařilo se mi manuálně vytvořit instanci takto:

<?php
    /** @inject @var \Nette\Caching\Storages\FileStorage */
    public $storage;

new \App\Model\MyService(new \Nette\Caching\Cache($this->storage), true);
?>

Jak bych toto zapsal pomocí konfigu? Jedná se mi o parametry té service.

Nakonec bych se ale chtěl dostat k tomu, že $storage bude Memcache. Když jsem změnil anotaci na Nette\Caching\Storages\MemcachedStorage, tak mi to vypíše

Service of type Nette\Caching\Storages\MemcachedStorage not found.

Proč, když je tato třída normálně v balíčku nette? (a existuje vedle FileStorage)

Editoval ondrej.svec (25. 6. 2014 19:18)

David Matějka
Moderator | 6445
+
+1
-
  1. ve sluzbach nevyzaduj jako zavislost Nette\Caching\Cache, ale Nette\Caching\IStorage, coz je interface, ktery implementujou vsechny storage (FileStorage, MemcachedStorage…). Stejne tak nikde nevyzaduj onu konkretni implementaci, ale prave ono IStorage. Nette\Caching\Cache si pak vzdy vytvor
  2. FileStorage je defaultni implementace, pokud ji chces vymenit, dej do neonu:
services:
	cacheStorage: Nette\Caching\Storages\MemcachedStorage

Editoval matej21 (25. 6. 2014 19:28)