2017-02-06 11 views
1

私は私が私のconfig.ymlにそのようなsymfonyの3.2でキャッシュを定義することができることを承知しています:例えばsymfony 3.2でconfig.ymlごとにTagAwareAdapterを使用しますか?

cache: 
    default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port% 
    pools: 
     my_redis_cache: 
      adapter: cache.adapter.redis 
      public: true 
      default_lifetime: 1200 
      provider: cache.default_redis_provider 

タグにより、キャッシュの無効化を可能に - 私のコントローラで私は簡単な使用

$cache = $this->get('my_redis_cache'); 

は今のSymfony 3.2以来、私たちはTagAwareAdapterと呼ばれる素晴らしい新機能を持つことができます。

これはによって、コードで行われます。

$cache = new TagAwareAdapter(
// Adapter for cached items 
new FilesystemAdapter(), 
// Adapter for tags 
new RedisAdapter('redis://localhost') 
); 

しかし、私はそれが私のconfig.ymlに定義することができますか?

私のようなものを探しています:

cache: 
    default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port% 
    pools: 
     my_redis_cache: 
      adapter: cache.adapter.redis 
      public: true 
      default_lifetime: 1200 
      provider: cache.default_redis_provider 
     my_tag_aware_cache: 
      adapter: cache.adapter.tagawareadapter 
      provider: 
       - my_file_cache 
       - my_redis_cache 

しかし、私はそれを定義する方法見当がつかない - 私は今しばらく以来&エラーをしようと遊んでいます - 私が得たすべては、これまでのところ、エラーでした。

答えて

2

愚かな私。今、私は

$cache = $this->get('my_tag_aware_cache'); 

とコントローラの私のキャッシュを受け取ると、それはTagAware、キャッシュの

my_tag_aware_cache: 
     class: Symfony\Component\Cache\Adapter\TagAwareAdapter 
     arguments: [ '@my_file_cache', '@my_redis_cache' ] 

:私はservices.ymlで単純なサービスを定義することによってそれを行うことができます。

これを達成する別の方法がありますか?

+0

設定のみの解決策があるのでしょうか? 'CacheItem'はタグの設定を許可しますが、タグは' TagAwareAdapter'を使うときだけ動作するというのはちょっと奇妙だと思います。また、 'TagAwareAdapter'は手動で作成しなければなりません。 – toooni

+0

申し訳ありませんが、完全にあなたの質問を取得しないでください、私の解決策は、あなたの新しいコードがないことを意味するときに '設定のみ'です – LBA

1

上部の答えはソリューションにとその良いものを提供して、私はまた、いくつかの時間TagAwareAdapterを使用する方法を見つけることを無駄にして、私はちょうど、その答えとして一緒にそれをすべて入れます。これは私のSymfony 3.4の解決策です。

config.yml

cache: 
    pools: 
     app.cache.file: 
      public: true 
      adapter: cache.adapter.filesystem 
     app.cache.redis: 
      public: true 
      adapter: cache.adapter.redis 

services.yml

myapp.cache: 
    public: true 
    class: Symfony\Component\Cache\Adapter\TagAwareAdapter 
    arguments: [ '@app.cache.file', '@app.cache.redis' ] 

(コントローラ内など)このような使用に:

/** @var TagAwareAdapterInterface $cache */ 
$cache = $this->get('myapp.cache'); 

しないでください赤い瞬間を忘れるeを実行し、redisパッケージをインストールしてください。

composer require predis/predis 
+0

これはありがとう! – LBA

関連する問題