Запросы
Flight инкапсулирует HTTP-запрос в единый объект, к которому можно получить доступ следующим образом:
$request = Flight::request();
Типичные Сценарии Использования
Когда вы работаете с запросом в веб-приложении, обычно вы хотите извлечь заголовок или параметр $_GET
или $_POST
, или, возможно, даже сырое тело запроса. Flight предоставляет простой интерфейс для выполнения всех этих действий.
Вот пример получения параметра строки запроса:
Flight::route('/search', function(){
$keyword = Flight::request()->query['keyword'];
echo "Вы ищете: $keyword";
// запрашиваем базу данных или что-то еще с $keyword
});
Вот пример формы с методом POST:
Flight::route('POST /submit', function(){
$name = Flight::request()->data['name'];
$email = Flight::request()->data['email'];
echo "Вы отправили: $name, $email";
// сохранить в базе данных или что-то еще с $name и $email
});
Свойства Объекта Запроса
Объект запроса предоставляет следующие свойства:
- body - Сырое тело HTTP-запроса
- url - Запрашиваемый URL
- base - Родительский подкаталог URL
- method - Метод запроса (GET, POST, PUT, DELETE)
- referrer - URL-адрес реферера
- ip - IP-адрес клиента
- ajax - Является ли запрос AJAX-запросом
- scheme - Протокол сервера (http, https)
- user_agent - Информация о браузере
- type - Тип содержимого
- length - Длина содержимого
- query - Параметры строки запроса
- data - Пост-данные или JSON-данные
- cookies - Данные cookie
- files - Загруз файлы
- secure - Является ли соединение безопасным
- accept - Параметры принятия HTTP
- proxy_ip - IP-адрес прокси-клиента. Сканирует массив
$_SERVER
на наличиеHTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
,HTTP_X_FORWARDED
,HTTP_X_CLUSTER_CLIENT_IP
,HTTP_FORWARDED_FOR
,HTTP_FORWARDED
в указанном порядке. - host - Имя хоста запроса
Вы можете получить доступ к свойствам query
, data
, cookies
и files
как к массивам или объектам.
Итак, чтобы получить параметр строки запроса, вы можете сделать:
$id = Flight::request()->query['id'];
Или вы можете сделать:
$id = Flight::request()->query->id;
СЫРОЕ Тело Запроса
Чтобы получить сырое тело HTTP-запроса, например, при работе с запросами PUT, вы можете сделать:
$body = Flight::request()->getBody();
JSON Входные Данные
Если вы отправляете запрос с типом application/json
и данными {"id": 123}
, они будут доступны через свойство data
:
$id = Flight::request()->data->id;
$_GET
Вы можете получить доступ к массиву $_GET
через свойство query
:
$id = Flight::request()->query['id'];
$_POST
Вы можете получить доступ к массиву $_POST
через свойство data
:
$id = Flight::request()->data['id'];
$_COOKIE
Вы можете получить доступ к массиву $_COOKIE
через свойство cookies
:
$myCookieValue = Flight::request()->cookies['myCookieName'];
$_SERVER
Существует удобный способ доступа к массиву $_SERVER
через метод getVar()
:
$host = Flight::request()->getVar['HTTP_HOST'];
Доступ к Загруженным Файлам через $_FILES
Вы можете получить доступ к загруженным файлам через свойство files
:
$uploadedFile = Flight::request()->files['myFile'];
Обработка Загрузки Файлов
Вы можете обрабатывать загрузку файлов с помощью фреймворка с помощью некоторых вспомогательных методов. В основном это сводится к извлечению данных файла из запроса и перемещению их в новое местоположение.
Flight::route('POST /upload', function(){
// Если у вас было поле ввода, такое как <input type="file" name="myFile">
$uploadedFileData = Flight::request()->getUploadedFiles();
$uploadedFile = $uploadedFileData['myFile'];
$uploadedFile->moveTo('/path/to/uploads/' . $uploadedFile->getClientFilename());
});
Если вы загрузили несколько файлов, вы можете пройтись по ним в цикле:
Flight::route('POST /upload', function(){
// Если у вас было поле ввода, такое как <input type="file" name="myFiles[]">
$uploadedFiles = Flight::request()->getUploadedFiles()['myFiles'];
foreach ($uploadedFiles as $uploadedFile) {
$uploadedFile->moveTo('/path/to/uploads/' . $uploadedFile->getClientFilename());
}
});
Заметка по Безопасности: Всегда валидируйте и очищайте ввод пользователя, особенно при работе с загрузками файлов. Всегда валидируйте типы расширений, которые вы разрешите загружать, но вы также должны валидировать "магические байты" файла, чтобы убедиться, что это действительно тот тип файла, который пользователь заявляет, что это. Существуют статьи и библиотеки для помощи в этом.
Заголовки Запроса
Вы можете получить доступ к заголовкам запроса с помощью метода getHeader()
или getHeaders()
:
// Возможно, вам нужен заголовок авторизации
$host = Flight::request()->getHeader('Authorization');
// или
$host = Flight::request()->header('Authorization');
// Если вам нужно получить все заголовки
$headers = Flight::request()->getHeaders();
// или
$headers = Flight::request()->headers();
Тело Запроса
Вы можете получить доступ к сырому телу запроса, используя метод getBody()
:
$body = Flight::request()->getBody();
Метод Запроса
Вы можете получить доступ к методу запроса, используя свойство method
или метод getMethod()
:
$method = Flight::request()->method; // фактически вызывает getMethod()
$method = Flight::request()->getMethod();
Примечание: Метод getMethod()
сначала извлекает метод из $_SERVER['REQUEST_METHOD']
, затем он может быть переопределен
с помощью $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']
, если он существует, или $_REQUEST['_method']
, если он существует.
URL Запросов
Существуют несколько вспомогательных методов для сборки частей URL для вашего удобства.
Полный URL
Вы можете получить доступ к полному URL запроса, используя метод getFullUrl()
:
$url = Flight::request()->getFullUrl();
// https://example.com/some/path?foo=bar
Базовый URL
Вы можете получить доступ к базовому URL, используя метод getBaseUrl()
:
$url = Flight::request()->getBaseUrl();
// Обратите внимание, нет конечного слэша.
// https://example.com
Парсинг Запросов
Вы можете передать URL в метод parseQuery()
, чтобы разобрать строку запроса в ассоциативный массив:
$query = Flight::request()->parseQuery('https://example.com/some/path?foo=bar');
// ['foo' => 'bar']