Запросы
Flight инкапсулирует HTTP-запрос в один объект, который можно получить следующим образом:
$request = Flight::request();
Типичные сценарии использования
При работе с запросом в веб-приложении обычно вам захочется извлечь заголовок, параметр из $_GET
или $_POST
, или, возможно, сырой тело запроса. Flight предоставляет простой интерфейс для выполнения всех этих действий.
Вот пример получения параметра строки запроса:
Flight::route('/search', function(){
$keyword = Flight::request()->query['keyword'];
echo "You are searching for: $keyword";
// запрос к базе данных или что-то другое с $keyword
});
Вот пример, возможно, формы с методом POST:
Flight::route('POST /submit', function(){
$name = Flight::request()->data['name'];
$email = Flight::request()->data['email'];
echo "You submitted: $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 - Данные POST или JSON
- cookies - Данные cookie
- files - Загруженные файлы
- secure - Является ли соединение безопасным
- accept - Параметры HTTP accept
- 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 - Имя хоста запроса
- servername - SERVER_NAME из
$_SERVER
Вы можете обращаться к свойствам 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'];
Обработка загрузки файлов (v3.12.0)
Вы можете обработать загрузку файлов с помощью фреймворка с помощью вспомогательных методов. Это в основном сводится к извлечению данных файла из запроса и перемещению его в новое место.
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()
:
// Возможно, вам нужен заголовок Authorization
$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']