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()
// Можливо, вам потрібен заголовок Authorization $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']