В PHP уже есть несколько встроенных функций, упрощающих работу с HTTP. Например, существуют суперглобальные переменные, содержащие информацию из запроса.

И они подойдут в случае, когда вы просто хотите запустить небольшой скрипт, который не составит труда поддерживать. Однако если вы хотите писать чистый, удобный в сопровождении SOLID-код, вместо них вам понадобится класс с красивым объектно-ориентированным интерфейсом, который вы сможете использовать в своем приложении.

Еще раз: вам не придется изобретать велосипед, а просто нужно установить пакет. Я решил написать свой собственный HTTP-компонент, потому что существующие мне не понравились, но вам не обязательно делать то же самое.

Вот альтернативы: Symfony HttpFoundationNette HTTP ComponentAura Websabre/http

В этом уроке я буду использовать свой собственный HTTP-компонент, но вы, естественно, можете использовать любой пакет, который вам нравится. Вам просто придется самостоятельно адаптировать код из туториала.

И снова отредактируйте composer.json , добавив новый компонент, а затем запустите composer update:

  "require": {
    "php": ">=7.0.0",
    "filp/whoops": "~2.1",
    "patricklouys/http": "~1.4"
  },

Теперь добавьте в свой Bootstrap.php ниже кода обработчика ошибок следующий фрагмент (и не забудьте удалить исключение):

$request = new \Http\HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER);

$response = new \Http\HttpResponse;

Это задаст объекты Request и Response, которые вы можете использовать в других классах для получения данных из запроса и отправки ответа обратно в браузер.

Чтобы действительно отправить что-то обратно, вам также необходимо добавить следующий фрагмент в конец файла Bootstrap.php:

foreach ($response->getHeaders() as $header) {

    header($header, false);

}
echo $response->getContent();

Ответные данные будут отправлены в браузер. Если вы этого не сделаете, ничего не произойдет, поскольку объект Response только хранит данные. Большинство других HTTP-компонентов функционируют иначе: их классы отправляют данные обратно в браузер в качестве побочного эффекта. Имейте это в виду, если пользуетесь другим компонентом.

Второй параметр header() имеет значение false, поскольку в противном случае существующие заголовки будут перезаписаны.

Сейчас он просто отправляет пустой ответ обратно в браузер с кодом состояния 200. Чтобы это изменить, добавьте следующий код между приведенными выше фрагментами кода (прямо перед оператором foreach):

$content = '<h1>Hello World</h1>';

$response->setContent($content);

Если хотите потестить ошибку 404, используйте следующий код:

$response->setContent('404 - Page not found');
$response->setStatusCode(404);

Помните, что объект только хранит данные, поэтому, если вы установите несколько кодов состояния перед отправкой ответа, применится только последний. В последующих частях я покажу вам, как использовать различные функции компонентов. А пока не стесняйтесь читать документацию или исходный код, если хотите узнать, как все работает.

Источник

Наверх