Метод getKey класса CacheItem
Метод getKey класса CacheItem возвращает ключ,
под которым данный элемент хранится в кэше. Ключ - это строка,
которая однозначно идентифицирует запись в хранилище.
Метод не принимает параметров и всегда возвращает строку.
Его удобно использовать, когда нужно узнать, под каким именем
элемент был получен из кэша, например, для логирования или
передачи в другие методы.
Синтаксис
public function getKey(): string
Пример
Давайте получим элемент из кэша и выведем его ключ:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Cache\CacheInterface;
class CacheController extends AbstractController
{
#[Route('/cache/key', name: 'cache_key')]
public function key(CacheInterface $cache): Response
{
$item = $cache->getItem('user_abcde');
$item->set('hello');
$cache->save($item);
return new Response($item->getKey());
}
}
?>
Результат выполнения кода:
"user_abcde"
Пример
Давайте используем getKey вместе с isHit,
чтобы понять, был ли элемент найден в кэше:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Cache\CacheInterface;
class CacheController extends AbstractController
{
#[Route('/cache/hit', name: 'cache_hit')]
public function hit(CacheInterface $cache): Response
{
$item = $cache->getItem('article_1');
if ($item->isHit()) {
return new Response('Hit: ' . $item->getKey());
}
return new Response('Miss: ' . $item->getKey());
}
}
?>
Результат выполнения кода при отсутствии элемента в кэше:
"Miss: article_1"
Пример
Давайте переберём несколько элементов и соберём их ключи в массив:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\Cache\CacheInterface;
class CacheController extends AbstractController
{
#[Route('/cache/keys', name: 'cache_keys')]
public function keys(CacheInterface $cache): Response
{
$keys = ['user_1', 'user_2', 'user_3'];
$res = [];
foreach ($keys as $key) {
$item = $cache->getItem($key);
$item->set('hello');
$cache->save($item);
$res[] = $item->getKey();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"user_1, user_2, user_3"