Запрос
Всё, что прислал браузер, — адрес, параметры, данные формы, заголовки — Slim собирает в один объект запроса. Обработчик получает его первым аргументом, $request. Объект устроен по стандарту PSR-7 — общему для PHP описанию запроса и ответа, поэтому те же методы встречаются и в других фреймворках.
Суперглобальные массивы $_GET и $_POST в Slim не используют: все данные читают из $request.
Параметры адреса
Параметры после знака вопроса возвращает метод getQueryParams():
// public/index.php
$app->get('/search', function (Request $request, Response $response) {
$params = $request->getQueryParams();
$query = $params['q'] ?? '';
$response->getBody()->write('Ищем: ' . htmlspecialchars($query));
return $response;
});Откройте http://localhost:8080/search?q=slim — на странице будет «Ищем: slim». Метод возвращает обычный массив; если параметра нет, срабатывает значение после ??. Функция htmlspecialchars() обезвреживает HTML в чужом тексте.
Данные формы и JSON
Тело запроса — данные формы или JSON — возвращает getParsedBody(). Чтобы Slim разбирал и JSON, в public/index.php после создания приложения добавьте одну строку:
// public/index.php
$app = AppFactory::create();
$app->addBodyParsingMiddleware();Теперь данные читаются одинаково в обоих случаях:
// public/index.php
$app->post('/posts', function (Request $request, Response $response) {
$data = (array) $request->getParsedBody();
$title = trim($data['title'] ?? '');
$response->getBody()->write('Создана статья: ' . htmlspecialchars($title));
return $response;
});Проверка из терминала:
curl -X POST -d "title=Первая статья" http://localhost:8080/postsВ ответ придёт «Создана статья: Первая статья». Приведение (array) нужно потому, что при пустом теле метод возвращает null.
Заголовки
Заголовок — служебная строка запроса вида «имя: значение». Его читает getHeaderLine():
$agent = $request->getHeaderLine('User-Agent');Если заголовка нет, вернётся пустая строка. Регистр букв в имени не важен.
Что ещё есть в запросе
| Метод | Что возвращает |
|---|---|
getMethod() | Метод HTTP: GET, POST |
getUri()->getPath() | Путь адреса: /posts/5 |
hasHeader('Authorization') | Есть ли заголовок |
getCookieParams() | Массив cookie |
getServerParams() | Данные сервера, например REMOTE_ADDR |
getUploadedFiles() | Загруженные файлы |
getAttribute('user') | Атрибут запроса |
Атрибуты
Атрибуты — данные, которые к запросу добавляет не браузер, а само приложение по пути к обработчику. Например, посредник проверил вход и положил в запрос пользователя, а обработчик его читает:
$user = $request->getAttribute('user');Если атрибута нет, вернётся null. Как посредник добавляет атрибут, показано в уроке о посредниках.
Частая ошибка
getParsedBody() возвращает null для JSON, если забыть $app->addBodyParsingMiddleware() или если клиент не прислал заголовок Content-Type: application/json. Данные обычной формы PHP разбирает сам, поэтому ошибка проявляется только на JSON-запросах — и её долго ищут.