РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
475 of 1361 menu

Атрибут Cache

Атрибут Cache вешается на метод контроллера и сохраняет результат его работы в кэш. Первым параметром передаётся время жизни кэша в секундах. После истечения этого времени Symfony заново выполнит метод и обновит кэш. Если кэш ещё актуален, метод не вызывается, а ответ берётся из хранилища.

Синтаксис

#[Cache(expires: time, public: bool, smaxage: int, maxage: int, vary: array)]

Пример

Давайте закэшируем результат метода на 60 секунд:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentCacheAttributeCache; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] #[Cache(expires: 60)] public function index(): Response { return new Response('article'); } } ?>

Результат выполнения кода:

article

Пример

Давайте сделаем кэш публичным и зададим время жизни на стороне клиента:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentCacheAttributeCache; class ArticleController extends AbstractController { #[Route('/user', name: 'article_user')] #[Cache(expires: 3600, public: true, maxage: 600, smaxage: 900)] public function user(): Response { return new Response('user'); } } ?>

Результат выполнения кода:

user

Пример

Давайте зададим заголовки Vary, чтобы кэш зависел от принимаемых типов контента:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentCacheAttributeCache; class ArticleController extends AbstractController { #[Route('/hello', name: 'article_hello')] #[Cache(expires: 120, vary: ['Accept', 'Accept-Language'])] public function hello(): Response { return new Response('hello'); } } ?>

Результат выполнения кода:

hello

Пример

Давайте проверим работу кэша, увеличив счётчик вызовов метода:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentCacheAttributeCache; class ArticleController extends AbstractController { #[Route('/counter', name: 'article_counter')] #[Cache(expires: 300)] public function counter(): Response { $count = random_int(1, 100); return new Response((string) $count); } } ?>

Первый запрос вернёт случайное число, например:

42

Повторный запрос в течение 300 секунд вернёт то же самое число, так как метод не будет вызван повторно.

Смотрите также

  • атрибут MapRequestPayload,
    который привязывает тело запроса к объекту
  • атрибут MapQueryString,
    который привязывает query-параметры к объекту
  • атрибут MapQueryParameter,
    который привязывает отдельный query-параметр
  • атрибут MapEntity,
    который автоматически загружает сущность из базы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить