我創建了一個使用FilesystemCache的服務,我不想在每次調用服務時創建一個新的FilesystemCache,所以我在服務構造函數中有一個參數,我可以給出給出一個實例。 我到目前爲止有:如何向Symfony服務添加構造函數參數
服務類:
class MyService
{
private $cache;
private $url;
/**
* MyService constructor.
* @param FilesystemCache $cache
*/
public function __construct(FilesystemCache $cache)
{
$this->cache = $cache;
}
private function data()
{
if ($this->cache->has('data')) {
$data = $this->cache->get('data');
} else {
$data = file_get_contents("my/url/to/data");
}
return $data;
}
}
配置:
services:
# Aliases
Symfony\Component\Cache\Adapter\FilesystemAdapter: '@cache.adapter.filesystem'
# Services
services.myservice:
class: AppBundle\Services\MyService
arguments:
- '@cache.adapter.filesystem'
當我使用該服務:
$myService = $this->container->get('services.myservice');
但我得到的是一個錯誤:
The definition "services.myservice" has a reference to an abstract definition "cache.adapter.filesystem". Abstract definitions cannot be the target of references.
所以,我的問題是我怎麼也得修改我的服務或我的聲明,或什麼的,能夠做我想做的事:不創建一個實例每次我打電話時間服務。
我希望你的論點是:'Symfony \ Component \ Cache \ Adapter \ FilesystemAdapter'不是別名服務'@ cache.adapter.filesystem'。這可能嗎? – dbrumann
那麼據我看你應該做一個新的FilesystemCache,因爲它是一個抽象類,除非你擴展這個類然後在構造函數中使用子類 –
@dbrumann如果我用路由替換別名我有下一個錯誤:''依賴於不存在的服務「\ Symfony \ Component \ Cache \ Adapter \ FilesystemAdapter」。# – piterio