15 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
-
error code: 502
1
+
<p>Каждая HTTP-сессия определяется двумя вещами: запросом и ответом. Запрос формируется клиентом, например, браузером, а ответ - сервером.</p>
2
+
<p>В PHP для работы с http-сессией встроено множество глобальных массивов, но их использование во фреймворках не допускается. Это технически можно, но это "злое" программирование.</p>
3
+
<p>И запрос и ответ в Slim представлены двумя объектами, которые передаются в каждый обработчик маршрута.</p>
4
+
<p>$request используется для извлечения данных запроса, например, заголовков или содержимого отправленной формы. У запроса нет сеттеров. Его уже выполнили и он не может поменяться.</p>
5
+
<p>В противоположность этому $response используется для формирования ответа и в процессе работы наполняется данными: заголовками и телом.</p>
6
+
<p>Тело ответа хранится внутри $response как объект, который можно получить через метод getBody(). А метод write() записывает данные в этот объект. Такая структура объектов выбрана не просто так. HTTP позволяет отдавать данные потоком (чанками), для которых нужны свои методы работы.</p>
7
+
<p>Несмотря на то, что объект с телом ответа может меняться, сам $response никогда не изменяется. Любой его метод формирует новый $response:</p>
8
+
<p>Если не знать этого, можно легко допустить такую ошибку:</p>
9
+
<p>В этом коде withStatus() возвращает новый $response, который не используется, а наружу возвращается старый. Если попробовать выполнить запрос к этому обработчику, то он вернет изначально переданный в функцию $response.</p>
10
+
<h2>Параметры запроса</h2>
11
+
<p>Параметры запроса не являются частью маршрута и не влияют на выбор обработчика. Связано это с тем, что такие параметры используются для различных вспомогательных целей, например, параметр page обозначает страницу просматриваемого списка. Обработчик в такой ситуации всегда один и тот же, а вот данные показываются разные.</p>
12
+
<p>Параметры извлекаются из объекта $request несколькими способами:</p>
13
+
<ul><li>getQueryParams() - извлекает все параметры</li>
14
+
<li>getQueryParam($name, $defaultValue) - извлекает значение конкретного параметра. Вторым параметром принимает значение по умолчанию</li>
15
+
</ul><p>Количество обработчиков и маршрутов, которые можно добавить, не ограничено. При этом микрофреймворки не задают никакой структуры. Если кода становится много, то разделять его по файлам придется самостоятельно.</p>