Метод getRealMethod
Метод getRealMethod класса Request возвращает
реальный HTTP-метод запроса. В отличие от метода getMethod,
он учитывает переопределение метода через специальный заголовок
X-HTTP-Method-Override. Это полезно, когда клиент
не может отправить, например, PUT или DELETE
напрямую и вынужден использовать POST с заголовком-переопределением.
Метод не принимает параметров и возвращает строку с названием метода
в верхнем регистре.
Синтаксис
$res = $request->getRealMethod();
Пример
Давайте создадим объект Request с методом GET
и получим реальный метод:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class RequestController extends AbstractController
{
public function index(): Response
{
$request = Request::create('/');
$res = $request->getRealMethod();
return new Response($res);
}
}
?>
Результат выполнения кода:
"GET"
Пример
Давайте создадим POST-запрос с заголовком
X-HTTP-Method-Override и посмотрим, что вернёт метод:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class RequestController extends AbstractController
{
public function index(): Response
{
$request = Request::create('/', 'POST');
$request->headers->set('X-HTTP-Method-Override', 'PUT');
$res = $request->getRealMethod();
return new Response($res);
}
}
?>
Результат выполнения кода:
"PUT"
Как видно из примера, метод getRealMethod вернул
'PUT', хотя сам запрос был отправлен методом POST.
Для сравнения, метод getMethod в этой же ситуации вернул бы
'POST'.
Пример
Давайте используем метод внутри контроллера и вернём ответ в зависимости от реального метода:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class RequestController extends AbstractController
{
public function index(Request $request): Response
{
$method = $request->getRealMethod();
if ($method === 'DELETE') {
return new Response('record deleted');
}
return new Response('method: ' . $method);
}
}
?>
Результат выполнения кода для DELETE-запроса:
"record deleted"
Смотрите также
-
метод
getMethod,
который возвращает HTTP-метод без учёта переопределения -
метод
isMethod,
который проверяет соответствие метода запроса заданному -
метод
isMethodIdempotent,
который проверяет идемпотентность метода -
класс
Request,
который представляет HTTP-запрос