Заголовки HTTP-запроса

Работа с HTTP-заголовками в Imhotep проста и интуитивно понятна. Заголовки содержат важную метаинформацию о запросе: тип контента, браузер пользователя, IP-адрес и многое другое.

Получение заголовков

Получить все заголовки

// Возвращает ассоциативный массив всех заголовков
$headers = $request->headers();
$headers = $request->headers->all(); // Тоже самое
PHP

Получить конкретный заголовок

$value = $request->headers('X-Header-Name');
$value = $request->header('X-Header-Name'); // Альтернативный вариант
$value = $request->headers->get('X-Header-Name'); // Альтернативный вариант
PHP

Значение по умолчанию

Если заголовок отсутствует, можно вернуть значение по умолчанию:

// Строка по умолчанию
$value = $request->header('X-Header-Name', 'default-value');

// Callback для значения по умолчанию
$value = $request->header('X-Header-Name', function () {
    return 'computed-default';
});
PHP

Проверка наличия заголовка

// Проверить один заголовк
if ($request->hasHeader('X-Header-Name')) {
    // Заголовок присутствует
}
// Альтернативный способ: $request->headers->has('X-Header-Name')

// Проверить несколько заголовков
if ($request->hasHeaders(['X-Header-1', 'X-Header-2'])) {
    // Все указанные заголовки присутствуют
}
// Альтернативный способ: $request->headers->hasMany(['X-Header-1', 'X-Header-2'])
PHP

Распространённые заголовки

Imhotep предоставляет удобные методы для работы с часто используемыми заголовками:

IP-адрес пользователя

$ip = $request->ip();
// Пример: '192.168.1.1'
PHP

User-Agent

$userAgent = $request->userAgent();
// Пример: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
PHP

Тип запроса

// Ajax запрос
if ($request->ajax()) {
    // Это Ajax-запрос
}

// PJAX запрос (частичная загрузка страницы)
if ($request->pajax()) {
    // Это PJAX-запрос
}

// Предварительная загрузка (prefetch)
if ($request->prefetch()) {
    // Браузер предзагружает страницу
}
PHP

HTTP Basic Auth

$user = $request->getUser();     // Логин
$password = $request->getPassword(); // Пароль
PHP

Bearer-токен авторизации

Для API, использующих Bearer-токены в заголовке Authorization:

$token = $request->bearerToken();
// Из заголовка: Authorization: Bearer your_token_here
// Вернёт: 'your_token_here'
PHP

Согласование контента

Получить поддерживаемые типы контента

$contentTypes = $request->getAcceptableTypes();
// ['text/html', 'application/json', 'application/xml']
PHP

Проверить поддержку типа

// Один тип
if ($request->accepts('text/html')) {
    // Клиент принимает HTML
}

// Несколько типов
if ($request->accepts('text/html', 'application/json')) {
    // Клиент принимает HTML или JSON
}
PHP

Быстрые проверки для популярных форматов

// JSON
if ($request->acceptsJson()) {
    // Клиент принимает JSON
}

if ($request->wantsJson()) {
    // Клиент ожидает JSON
}

if ($request->expectsJson()) {
    // Вероятно, это API-запрос, ожидающий JSON
}

// HTML
if ($request->acceptsHtml()) {
    // Клиент принимает HTML
}
PHP

Определение формата ответа

$format = $request->format();
// Возвращает: 'html', 'json', 'xml' и т.д.
PHP

Языковые предпочтения

// Получить список предпочитаемых языков
$languages = $request->getAcceptedLanguages();
// ['en_us', 'ru_ru', 'de_de']

// Проверить поддержку языка
if ($request->acceptLanguage('ru_ru')) {
    // Клиент принимает русский язык
}
PHP