Метод isMethodCacheable
Метод isMethodCacheable класса Request
возвращает true, если HTTP-метод текущего
запроса считается кэшируемым согласно спецификации
HTTP, и false в противном случае. Параметров
метод не принимает. Кэшируемыми считаются методы
GET и HEAD - именно их ответы
разрешено сохранять в промежуточных кэшах.
Методы POST, PUT, DELETE,
PATCH и OPTIONS не кэшируются.
Синтаксис
public function isMethodCacheable(): bool
Пример
Давайте проверим кэшируемость метода для GET-запроса:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$res = $request->isMethodCacheable();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода для GET-запроса:
true
Пример
Давайте проверим кэшируемость метода для POST-запроса:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_create', methods: ['POST'])]
public function create(Request $request): Response
{
$res = $request->isMethodCacheable();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода для POST-запроса:
false
Пример
Давайте переберём несколько методов и выведем результат проверки для каждого из них:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/check', name: 'article_check')]
public function check(): Response
{
$methods = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'];
$res = [];
foreach ($methods as $method) {
$request = Request::create('/article', $method);
$res[$method] = $request->isMethodCacheable();
}
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
["GET" => true, "HEAD" => true, "POST" => false, "PUT" => false, "DELETE" => false]
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
метод
getMethod,
который возвращает HTTP-метод запроса -
метод
isMethod,
который проверяет соответствие метода запроса -
метод
isMethodIdempotent,
который проверяет идемпотентность метода