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