Атрибут headers
Атрибут headers принадлежит классу Request
и возвращает все HTTP-заголовки текущего запроса.
Значением атрибута является объект HeaderBag,
который ведёт себя как массив: к заголовкам можно
обращаться по имени и получать их значения.
Имена заголовков нечувствительны к регистру.
Получить объект Request можно через аргумент
метода контроллера, через RequestStack
или через глобальную переменную $_SERVER.
Чаще всего атрибут headers используется для
чтения таких заголовков, как User-Agent,
Accept, Authorization, Content-Type.
Синтаксис
$request->headers->get('Header-Name');
$request->headers->all();
Пример
Давайте получим значение заголовка User-Agent
в методе контроллера:
<?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/headers', name: 'request_headers')]
public function headers(Request $request): Response
{
$userAgent = $request->headers->get('User-Agent');
return new Response($userAgent);
}
}
?>
Результат выполнения кода:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
Пример
Давайте получим значение заголовка с значением по умолчанию, если заголовок отсутствует:
<?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/accept', name: 'request_accept')]
public function accept(Request $request): Response
{
$accept = $request->headers->get('Accept', 'text/html');
return new Response($accept);
}
}
?>
Результат выполнения кода:
"text/html,application/xhtml+xml,application/xml;q=0.9"
Пример
Давайте проверим наличие заголовка Authorization
с помощью метода has:
<?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/auth', name: 'request_auth')]
public function auth(Request $request): Response
{
if ($request->headers->has('Authorization')) {
return new Response('auth header present');
}
return new Response('auth header missing');
}
}
?>
Результат выполнения кода:
"auth header present"
Пример
Давайте получим все заголовки запроса в виде массива:
<?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/all-headers', name: 'request_all_headers')]
public function allHeaders(Request $request): Response
{
$headers = $request->headers->all();
return new Response(json_encode($headers));
}
}
?>
Результат выполнения кода:
{"host":["localhost"],"user-agent":["Mozilla/5.0"],"accept":["text/html"]}