Flight инкапсулирует HTTP-запрос в единый объект, к которому можно получить доступ следующим образом:
$request = Flight::request();
Когда вы работаете с запросом в веб-приложении, обычно вы хотите извлечь заголовок или параметр $_GET или $_POST, или, возможно, даже сырое тело запроса. Flight предоставляет простой интерфейс для выполнения всех этих действий.
$_GET
$_POST
Вот пример получения параметра строки запроса:
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 });
Объект запроса предоставляет следующие свойства:
$_SERVER
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
Вы можете получить доступ к свойствам query, data, cookies и files как к массивам или объектам.
query
data
cookies
files
Итак, чтобы получить параметр строки запроса, вы можете сделать:
$id = Flight::request()->query['id'];
Или вы можете сделать:
$id = Flight::request()->query->id;
Чтобы получить сырое тело HTTP-запроса, например, при работе с запросами PUT, вы можете сделать:
$body = Flight::request()->getBody();
Если вы отправляете запрос с типом application/json и данными {"id": 123}, они будут доступны через свойство data:
application/json
{"id": 123}
$id = Flight::request()->data->id;
Вы можете получить доступ к массиву $_GET через свойство query:
Вы можете получить доступ к массиву $_POST через свойство data:
$id = Flight::request()->data['id'];
Вы можете получить доступ к массиву $_COOKIE через свойство cookies:
$_COOKIE
$myCookieValue = Flight::request()->cookies['myCookieName'];
Существует удобный способ доступа к массиву $_SERVER через метод getVar():
getVar()
$host = Flight::request()->getVar['HTTP_HOST'];
Вы можете получить доступ к загруженным файлам через свойство 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():
getHeader()
getHeaders()
// Возможно, вам нужен заголовок авторизации $host = Flight::request()->getHeader('Authorization'); // или $host = Flight::request()->header('Authorization'); // Если вам нужно получить все заголовки $headers = Flight::request()->getHeaders(); // или $headers = Flight::request()->headers();
Вы можете получить доступ к сырому телу запроса, используя метод getBody():
getBody()
Вы можете получить доступ к методу запроса, используя свойство method или метод getMethod():
method
getMethod()
$method = Flight::request()->method; // фактически вызывает getMethod() $method = Flight::request()->getMethod();
Примечание: Метод getMethod() сначала извлекает метод из $_SERVER['REQUEST_METHOD'], затем он может быть переопределен с помощью $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'], если он существует, или $_REQUEST['_method'], если он существует.
$_SERVER['REQUEST_METHOD']
$_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']
$_REQUEST['_method']
Существуют несколько вспомогательных методов для сборки частей URL для вашего удобства.
Вы можете получить доступ к полному URL запроса, используя метод getFullUrl():
getFullUrl()
$url = Flight::request()->getFullUrl(); // https://example.com/some/path?foo=bar
Вы можете получить доступ к базовому URL, используя метод getBaseUrl():
getBaseUrl()
$url = Flight::request()->getBaseUrl(); // Обратите внимание, нет конечного слэша. // https://example.com
Вы можете передать URL в метод parseQuery(), чтобы разобрать строку запроса в ассоциативный массив:
parseQuery()
$query = Flight::request()->parseQuery('https://example.com/some/path?foo=bar'); // ['foo' => 'bar']