HTML Diff
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>