Адаптеры для взаимодействия между кешами 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);