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

Дата обновления перевода 2023-08-21

Адаптеры для взаимодействия между кешами 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
use Symfony\Component\Cache\Adapter\Psr16Adapter;

// объект кеша PSR-16, который вы хотите использовать

// кеш PSR-6, который использует ваш кеш внутренне!
$psr6Cache = new Psr16Adapter($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\Psr16Cache;

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

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

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