Адаптеры для взаимодействия между кешами PSR-6 и PSR-16

Иногда у вас может быть объект кеша, реализующий стандарт PSR-16, но его нужно передать в объект, который ожидает адаптер кеша PSR-6. Или у вас может быть обратная ситуация. Компонента кеша содержит два класса для двустороннего взаимодействия между кешами PSR-6 и PSR-16.

Использование объекта кеша PSR-16, как кеша PSR-6

Представьте, что вы хотите работать с классом, требующим объект пула кеша PSR-6. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
use Psr\Cache\CacheItemPoolInterface;

// выдуманный класс для примера
class GitHubApiClient
{
    // ...

    // требует объект кеша PSR-6
    public function __construct(CacheItemPoolInterface $cachePool)
    {
        // ...
    }
}

Но у вас уже есть объект кеша PSR-16, и вы бы хотели передать его классу. Не проблема! Компонент Cache предоставляет класс SimpleCacheAdapter именно для таких случаев применения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
use Symfony\Component\Cache\Simple\FilesystemCache;
use Symfony\Component\Cache\Adapter\SimpleCacheAdapter;

// объект кеша PSR-16, который вы хотите использовать
$psr16Cache = new FilesystemCache();

// кеш PSR-6, который использует ваш кеш внутренне!
$psr6Cache = new SimpleCacheAdapter($psr16Cache);

// теперь используйте это когда хотите
$githubApiClient = new GitHubApiClient($psr6Cache);

Использование объекта кеша PSR-6, как кеша PSR-16

Представьте, что вы хотите работать с классом, требующим объект кеша PSR-16. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
use Psr\SimpleCache\CacheInterface;

// выдуманный класс для примера
class GitHubApiClient
{
    // ...

    // требует объекта кеша PSR-16
    public function __construct(CacheInterface $cache)
    {
        // ...
    }
}

Но у вас уже есть объект кеша PSR-6, и вы бы хотели передать его классу. Не проблема! Компонент Cache предоставляет класс Psr6Cache именно для таких случаев применения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Cache\Simple\Psr6Cache;

// объект кеша PSR-6, который вы хотите использовать
$psr6Cache = new FilesystemAdapter();

// кеш PSR-16, который использует ваш кеш внутренне!
$psr16Cache = new Psr6Cache($psr6Cache);

// теперь используйте это когда хотите
$githubApiClient = new GitHubApiClient($psr16Cache);

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.