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

Метод isNotModified

Метод isNotModified класса Response проверяет, изменялся ли ответ с момента последнего запроса клиента. Метод принимает объект Request и сравнивает его заголовки If-Modified-Since и If-None-Match с заголовками Last-Modified и ETag текущего ответа. Если ответ не менялся, метод возвращает true, и клиенту следует отдать статус 304 Not Modified.

Синтаксис

public function isNotModified(Request $request): bool

Пример

Давайте проверим, изменился ли ответ с момента последнего запроса клиента:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(Request $request): Response { $response = new Response('article'); $response->setLastModified(new \DateTime('2024-01-01 12:00:00')); if ($response->isNotModified($request)) { return $response; } return $response; } } ?>

Результат выполнения кода при повторном запросе без изменений:

304 Not Modified

Пример

Давайте проверим кэш с помощью заголовка ETag:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/user', name: 'article_user')] public function user(Request $request): Response { $response = new Response('user'); $response->setEtag(md5('user')); if ($response->isNotModified($request)) { return $response; } return $response; } } ?>

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

304 Not Modified

Пример

Давайте вернём полный ответ, если данные изменились:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/hello', name: 'article_hello')] public function hello(Request $request): Response { $response = new Response('hello'); $response->setLastModified(new \DateTime('2024-06-01 10:00:00')); if ($response->isNotModified($request)) { return $response; } $response->setContent('hello world'); return $response; } } ?>

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

hello world

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

  • класс Response,
    который представляет HTTP-ответ
  • метод setLastModified,
    который задаёт дату последнего изменения
  • метод setEtag,
    который задаёт ETag ответа
  • метод prepare,
    который подготавливает ответ к отправке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить