Adapters For Interoperability between PSR-6 and PSR-16 Cache

Sometimes, you may have a Cache object that implements the PSR-16 standard, but need to pass it to an object that expects a PSR-6 cache adapter. Or, you might have the opposite situation. The cache component contains two classes for bidirectional interoperability between PSR-6 and PSR-16 caches.

場合によっては、PSR-16 標準を実装する Cache オブジェクトがあり、それを PSR-6cache アダプターを予期するオブジェクトに渡す必要がある場合があります。または、逆の状況にある可能性もあります。キャッシュ コンポーネントには、PSR-6 キャッシュと PSR-16 キャッシュ間の双方向の相互運用性のための 2 つのクラスが含まれています。

Using a PSR-16 Cache Object as a PSR-6 Cache

Suppose you want to work with a class that requires a PSR-6 Cache pool object. For example:

PSR-6 キャッシュ プール オブジェクトを必要とするクラスを操作するとします。例えば:
1
2
3
4
5
6
7
8
9
10
11
12
13
use Psr\Cache\CacheItemPoolInterface;

// just a made-up class for the example
class GitHubApiClient
{
    // ...

    // this requires a PSR-6 cache object
    public function __construct(CacheItemPoolInterface $cachePool)
    {
        // ...
    }
}

But, you already have a PSR-16 cache object, and you'd like to pass this to the class instead. No problem! The Cache component provides the Psr16Adapter class for exactly this use-case:

しかし、既に PSR-16 キャッシュ オブジェクトがあり、代わりにこれをクラスに渡したいと考えています。問題ない! Cache コンポーネントは、まさにこのユースケースに対応する Psr16Adapter クラスを提供します。
1
2
3
4
5
6
7
8
9
use Symfony\Component\Cache\Adapter\Psr16Adapter;

// $psr16Cache is the PSR-16 object that you want to use as a PSR-6 one

// a PSR-6 cache that uses your cache internally!
$psr6Cache = new Psr16Adapter($psr16Cache);

// now use this wherever you want
$githubApiClient = new GitHubApiClient($psr6Cache);

Using a PSR-6 Cache Object as a PSR-16 Cache

Suppose you want to work with a class that requires a PSR-16 Cache object. For example:

PSR-16 キャッシュ オブジェクトを必要とするクラスを操作するとします。例えば:
1
2
3
4
5
6
7
8
9
10
11
12
13
use Psr\SimpleCache\CacheInterface;

// just a made-up class for the example
class GitHubApiClient
{
    // ...

    // this requires a PSR-16 cache object
    public function __construct(CacheInterface $cache)
    {
        // ...
    }
}

But, you already have a PSR-6 cache pool object, and you'd like to pass this to the class instead. No problem! The Cache component provides the Psr16Cache class for exactly this use-case:

しかし、既に PSR-6 キャッシュ プール オブジェクトがあり、代わりにこれをクラスに渡したいと考えています。問題ない! Cache コンポーネントは、まさにこのユースケースのために Psr16Cache クラスを提供します。
1
2
3
4
5
6
7
8
9
10
11
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Cache\Psr16Cache;

// the PSR-6 cache object that you want to use
$psr6Cache = new FilesystemAdapter();

// a PSR-16 cache that uses your cache internally!
$psr16Cache = new Psr16Cache($psr6Cache);

// now use this wherever you want
$githubApiClient = new GitHubApiClient($psr16Cache);