Адаптери для взаємодії між кешами PSR-6 і PSR-16

Дата оновлення перекладу 2022-11-11

Адаптери для взаємодії між кешами 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, і ви хотіли б передати його класу. Не проблема! Компонент Кеш надає клас 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, и ви б хотіли передати його клас. Не проблема! Компонент Кеш надає клас 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);