Метод setLastModified
Метод setLastModified класса Response устанавливает дату и время последнего изменения ресурса. Это значение отправляется клиенту в HTTP-заголовке Last-Modified. Браузеры и прокси-серверы используют этот заголовок для условных запросов: если контент не изменился с указанного времени, сервер может вернуть статус 304 Not Modified и сэкономить трафик. Первым параметром метод принимает объект \DateTimeInterface или целое число (Unix timestamp).
Синтаксис
public function setLastModified(?DateTimeInterface $date): static
Пример
Давайте установим время последнего изменения для ответа:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_show')]
public function show(): Response
{
$response = new Response('article');
$response->setLastModified(new DateTime('2024-01-01 12:00:00'));
return $response;
}
}
?>
Пример
Давайте проверим, изменился ли контент, и вернём статус 304, если нет:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_show')]
public function show(): Response
{
$response = new Response('article');
$response->setLastModified(new DateTime('2024-01-01 12:00:00'));
if ($response->isNotModified($this->getRequest())) {
return $response;
}
return $response;
}
}
?>
Если клиент отправил заголовок If-Modified-Since с датой, равной или более поздней, чем 2024-01-01 12:00:00, метод isNotModified вернёт true, и ответ будет отправлен со статусом 304.
Пример
Давайте передадим время в виде Unix timestamp:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_show')]
public function show(): Response
{
$response = new Response('article');
$response->setLastModified(1704106800);
return $response;
}
}
?>
Результат выполнения кода в HTTP-заголовках:
Last-Modified: Mon, 01 Jan 2024 12:00:00 GMT
Смотрите также
-
класс
Response,
который представляет HTTP-ответ -
метод
setEtag,
который задаёт ETag для кеширования -
метод
isNotModified,
который проверяет, изменился ли контент -
метод
setMaxAge,
который задаёт время кеширования ответа