FlightはHTTPリクエストを単一のオブジェクトにカプセル化し、 次のようにアクセスできます:
$request = Flight::request();
Webアプリケーションでリクエストを処理する際は、通常、ヘッダーを 取り出したり、$_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を使ってデータベースに保存するか、何か他のことをする });
リクエストオブジェクトは以下のプロパティを提供します:
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
$_SERVER
query、data、cookies、およびfilesプロパティには 配列またはオブジェクトとしてアクセスできます。
query
data
cookies
files
したがって、クエリ文字列パラメータを取得するには、次のようにできます:
$id = Flight::request()->query['id'];
または、次のようにできます:
$id = Flight::request()->query->id;
例えばPUTリクエストを扱うときに生のHTTPリクエストボディを取得するには、
$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の部分を組み合わせるためのいくつかのヘルパーメソッドがあります。
getFullUrl()メソッドを使用して完全なリクエストURLにアクセスできます:
getFullUrl()
$url = Flight::request()->getFullUrl(); // https://example.com/some/path?foo=bar
getBaseUrl()メソッドを使用してベースURLにアクセスできます:
getBaseUrl()
$url = Flight::request()->getBaseUrl(); // 注意: トレーリングスラッシュはありません。 // https://example.com
parseQuery()メソッドにURLを渡すことで、クエリ文字列を連想配列に解析できます:
parseQuery()
$query = Flight::request()->parseQuery('https://example.com/some/path?foo=bar'); // ['foo' => 'bar']