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
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
- ve sluzbach nevyzaduj jako zavislost
Nette\Caching\Cache
, aleNette\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 - FileStorage je defaultni implementace, pokud ji chces vymenit, dej do neonu:
services:
cacheStorage: Nette\Caching\Storages\MemcachedStorage
Editoval matej21 (25. 6. 2014 19:28)