Метод isMethodIdempotent
Метод isMethodIdempotent класса Request
возвращает true, если текущий HTTP-метод
является идемпотентным, и false в противном
случае. Идемпотентными считаются методы GET,
HEAD, PUT и DELETE - их
повторное выполнение не изменяет состояние сервера.
Метод не принимает параметров и опирается на
значение, возвращаемое методом getMethod.
Синтаксис
public function isMethodIdempotent(): bool
Пример
Давайте проверим идемпотентность для GET-запроса:
<?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 RequestController extends AbstractController
{
#[Route('/request/idempotent', name: 'request_idempotent')]
public function idempotent(Request $request): Response
{
$res = $request->isMethodIdempotent();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода для GET-запроса:
true
Пример
Давайте проверим идемпотентность для POST-запроса:
<?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 RequestController extends AbstractController
{
#[Route('/request/idempotent', name: 'request_idempotent')]
public function idempotent(Request $request): Response
{
$res = $request->isMethodIdempotent();
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода для POST-запроса:
false
Пример
Давайте выведем результат для нескольких методов подряд:
<?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 RequestController extends AbstractController
{
#[Route('/request/idempotent-list', name: 'request_idempotent_list')]
public function idempotentList(Request $request): Response
{
$methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'];
$res = [];
foreach ($methods as $method) {
$subRequest = Request::create('/', $method);
$res[$method] = $subRequest->isMethodIdempotent();
}
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
[
'GET' => true,
'POST' => false,
'PUT' => true,
'DELETE' => true,
'PATCH' => false,
]
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
метод
getMethod,
который возвращает HTTP-метод запроса -
метод
isMethod,
который проверяет соответствие HTTP-метода -
метод
isMethodCacheable,
который проверяет кэшируемость HTTP-метода