IncomingRequest クラス

IncomingRequest クラスは、ブラウザなどのクライアントからの HTTP リクエストのオブジェクト指向表現を提供します。これは Request クラスと Message クラスを拡張しており、下記のメソッドに加えて、これらのクラスのすべてのメソッドにアクセスできます。

リクエストへのアクセス

現在のクラスが CodeIgniter\Controller の子孫である場合、既に設定済みのリクエストクラスのインスタンスはクラスプロパティとしてアクセスできます。

<?php

namespace App\Controllers;

use CodeIgniter\Controller;

class UserController extends Controller
{
    public function index()
    {
        if ($this->request->isAJAX()) {
            // ...
        }
    }
}

コントローラー内ではないが、アプリケーションのリクエストオブジェクトにアクセスする必要がある場合は、Services クラス を使用してコピーを取得できます。

<?php

$request = \Config\Services::request();

ただし、クラスがコントローラー以外の場合、依存関係としてリクエストを渡してクラスプロパティとして保存することをお勧めします。

<?php

namespace App\Libraries;

use CodeIgniter\HTTP\RequestInterface;

class SomeClass
{
    protected $request;

    public function __construct(RequestInterface $request)
    {
        $this->request = $request;
    }
}

$someClass = new SomeClass(\Config\Services::request());

リクエストタイプの判定

リクエストには、AJAX リクエストやコマンドラインからのリクエストなど、いくつかのタイプがあります。これは isAJAX() メソッドと isCLI() メソッドで確認できます。

<?php

// Check for AJAX request.
if ($request->isAJAX()) {
    // ...
}

// Check for CLI Request
if ($request->isCLI()) {
    // ...
}

注記

isAJAX() メソッドは X-Requested-With ヘッダーに依存しており、場合によっては JavaScript を介した XHR リクエスト(例:fetch)ではデフォルトで送信されません。AJAX リクエスト セクションで、この問題を回避する方法を参照してください。

is()

バージョン 4.3.0 で追加。

v4.3.0 以降、is() メソッドを使用できます。ブール値を返します。

<?php

// Checks HTTP methods. Returns boolean.
$request->is('get');
$request->is('post');
$request->is('put');
$request->is('delete');
$request->is('head');
$request->is('patch');
$request->is('options');

// Checks if it is an AJAX request. The same as `$request->isAJAX()`.
$request->is('ajax');

// Checks if it is a JSON request.
$request->is('json');

getMethod()

getMethod() メソッドを使用して、このリクエストを表す HTTP メソッドを確認できます。

<?php

// Returns 'post'
$method = $request->getMethod();

デフォルトでは、メソッドは小文字の文字列(例:'get''post' など)として返されます。

重要

戻り値を小文字に変換する機能は非推奨です。将来のバージョンで削除され、このメソッドは PSR-7 と同等になります。

strtoupper() で呼び出しをラップすることで、大文字のバージョンを取得できます。

// Returns 'GET'
$method = strtoupper($request->getMethod());

isSecure() メソッドを使用して、リクエストが HTTPS 接続を介して行われたかどうかを確認することもできます。

<?php

if (! $request->isSecure()) {
    force_https();
}

入力の取得

Request オブジェクトを介して、$_GET$_POST$_COOKIE$_SERVER、および $_ENV から入力を取り出すことができます。データは自動的にフィルタリングされず、リクエストで渡された生の入力データが返されます。

注記

グローバル変数を使用することは悪い習慣です。基本的に避けるべきであり、Request オブジェクトのメソッドを使用することをお勧めします。

これらのメソッドを直接アクセスする代わりに使用する主な利点は($_POST['something'])、アイテムが存在しない場合は null を返し、データをフィルタリングできることです。これにより、アイテムが存在するかどうかを最初にテストすることなく、データを簡単に使用できます。つまり、通常は次のような処理を行うでしょう。

<?php

$something = $_POST['foo'] ?? null;

CodeIgniter の組み込みメソッドを使用すると、次のように簡単に実行できます。

<?php

$something = $request->getPost('foo');

データの取得

getGet()

getGet() メソッドは $_GET から取得します。

  • $request->getGet()

getPost()

getPost() メソッドは $_POST から取得します。

  • $request->getPost()

getCookie()

getCookie() メソッドは $_COOKIE から取得します。

  • $request->getCookie()

getServer()

getServer() メソッドは $_SERVER から取得します。

  • $request->getServer()

getEnv()

バージョン 4.4.4 で非推奨: このメソッドは最初から機能していません。env() を代わりに使用してください。

getEnv() メソッドは $_ENV から取得します。

  • $request->getEnv()

getPostGet()

さらに、$_GET または $_POST から情報を取得するためのいくつかのユーティリティメソッドがあり、検索する順序を制御する機能を維持します。

  • $request->getPostGet() - まず $_POST を、次に $_GET を確認します。

getGetPost()

  • $request->getGetPost() - まず $_GET を、次に $_POST を確認します。

getVar()

重要

このメソッドは下位互換性のためだけに存在します。新しいプロジェクトでは使用しないでください。既に使用している場合でも、より適切な別のメソッドを使用することをお勧めします。

getVar() メソッドは $_REQUEST から取得するため、$_GET$POST、または $_COOKIE のデータ(php.ini の request-order に依存)を返します。

警告

POST データのみを検証する場合は、getVar() を使用しないでください。新しい値は古い値を上書きします。同じ名前のクッキーが存在する場合、POST値はクッキーによって上書きされる可能性があり、request-orderで「C」を「P」の後に設定した場合、POST値がクッキーによって上書きされる可能性があります。

注記

受信リクエストのContent-Typeヘッダーがapplication/jsonに設定されている場合、getVar()メソッドは$_REQUESTデータではなくJSONデータ を返します。

JSONデータの取得

getJSON()を使用して、php://inputの内容をJSONストリームとして取得できます。

注記

このメソッドは、受信データが有効なJSONかどうかをチェックする手段がありません。JSONを期待している場合にのみ、このメソッドを使用してください。

<?php

$json = $request->getJSON();

デフォルトでは、JSONデータ内のオブジェクトはオブジェクトとして返されます。連想配列に変換する場合は、最初の引数にtrueを渡します。

2番目と3番目の引数は、json_decode() PHP関数の$depth$flags引数に対応します。

JSONからの特定データの取得

JSONストリームから特定のデータを取得するには、取得したいデータの変数名をgetJsonVar()に渡すか、「ドット」表記を使用してJSONを掘り下げて、ルートレベルにないデータを取得できます。

<?php

/*
 * With a request body of:
 * {
 *     "foo": "bar",
 *     "fizz": {
 *         "buzz": "baz"
 *     }
 * }
 */

$data = $request->getJsonVar('foo');
// $data = "bar"

$data = $request->getJsonVar('fizz.buzz');
// $data = "baz"

オブジェクトではなく連想配列として結果を取得したい場合は、2番目の引数にtrueを渡すことができます。

<?php

// With the same request as above
$data = $request->getJsonVar('fizz');
// $data->buzz = "baz"

$data = $request->getJsonVar('fizz', true);
// $data = ["buzz" => "baz"]

注記

dot_array_search()のドキュメント(Arrayヘルパー)で、「ドット」表記の詳細を確認してください。

生データの取得 (PUT、PATCH、DELETE)

getRawInput()を使用して、php://inputの内容を生ストリームとして取得できます。

<?php

$data = $request->getRawInput();

これにより、データが取得され、配列に変換されます。例:

<?php

var_dump($request->getRawInput());

/*
 * Outputs:
 * [
 *     'Param1' => 'Value1',
 *     'Param2' => 'Value2',
 * ]
 */

getRawInputVar()を使用して、生ストリームから指定された変数を取得し、フィルタリングすることもできます。

<?php

// When the request body is 'foo=one&bar=two&baz[]=10&baz[]=20'
var_dump($request->getRawInputVar('bar'));
// Outputs: two

// foo=one&bar=two&baz[]=10&baz[]=20
var_dump($request->getRawInputVar(['foo', 'bar']));
/*
 * Outputs:
 * [
 *      'foo' => 'one',
 *      'bar' => 'two'
 * ]
 */

// foo=one&bar=two&baz[]=10&baz[]=20
var_dump($request->getRawInputVar('baz'));
/*
 * Outputs:
 * [
 *      '10',
 *      '20'
 * ]
 */

// foo=one&bar=two&baz[]=10&baz[]=20
var_dump($request->getRawInputVar('baz.0'));
// Outputs: 10

入力データのフィルタリング

アプリケーションのセキュリティを維持するために、アクセスするすべての入力をフィルタリングする必要があります。これらのメソッドの2番目の引数として使用するフィルタの種類を渡すことができます。ネイティブのfilter_var()関数がフィルタリングに使用されます。有効なフィルタの種類のリストについては、PHPマニュアルを参照してください。

POST変数のフィルタリングは次のようになります。

<?php

$email = $request->getPost('email', FILTER_SANITIZE_EMAIL);

getJSON()getRawInput()を除き、上記で説明したすべてのメソッドは、2番目の引数として渡されたフィルタの種類をサポートしています。

ヘッダーの取得

headers()メソッドを使用して、リクエストとともに送信されたヘッダーにアクセスできます。このメソッドは、すべてのヘッダーの配列を返し、キーはヘッダーの名前、値はCodeIgniter\HTTP\Headerのインスタンスです。

<?php

var_dump($request->headers());

/*
 * Outputs:
 * [
 *     'Host'          => CodeIgniter\HTTP\Header,
 *     'Cache-Control' => CodeIgniter\HTTP\Header,
 *     'Accept'        => CodeIgniter\HTTP\Header,
 * ]
 */

1つのヘッダーのみが必要な場合は、その名前をheader()メソッドに渡すことができます。これにより、存在する場合は、大文字と小文字を区別せずに指定されたヘッダーオブジェクトが取得されます。存在しない場合はnullを返します。

<?php

// these are all equivalent
$host = $request->header('host');
$host = $request->header('Host');
$host = $request->header('HOST');

リクエストにヘッダーが存在するかどうかを確認するには、常にhasHeader()を使用できます。

<?php

if ($request->hasHeader('DNT')) {
    // Don't track something...
}

すべての値を1行にまとめた文字列としてヘッダーの値が必要な場合は、getHeaderLine()メソッドを使用できます。

<?php

// Accept-Encoding: gzip, deflate, sdch
echo 'Accept-Encoding: ' . $request->getHeaderLine('accept-encoding');

名前と値を1つの文字列に含めた完全なヘッダーが必要な場合は、ヘッダーを文字列としてキャストするだけです。

<?php

echo (string) $header;

リクエストURL

$request->getUri()メソッドを使用して、このリクエストの現在のURIを表すURIオブジェクトを取得できます。このオブジェクトを文字列としてキャストして、現在のリクエストの完全なURLを取得できます。

<?php

$uri = (string) $request->getUri();

このオブジェクトを使用すると、リクエストの任意の部分を個別に取得できます。

<?php

$uri = $request->getUri();

echo $uri->getScheme();         // http
echo $uri->getAuthority();      // snoopy:[email protected]:88
echo $uri->getUserInfo();       // snoopy:password
echo $uri->getHost();           // example.com
echo $uri->getPort();           // 88
echo $uri->getPath();           // /path/to/page
echo $uri->getRoutePath();      // path/to/page
echo $uri->getQuery();          // foo=bar&bar=baz
print_r($uri->getSegments());   // Array ( [0] => path [1] => to [2] => page )
echo $uri->getSegment(1);       // path
echo $uri->getTotalSegments();  // 3

getRoutePath()を使用して、現在のURI文字列(baseURLに対する相対パス)を操作できます。

注記

getRoutePath()メソッドはv4.4.0以降で使用できます。v4.4.0より前は、getPath()メソッドがbaseURLに対する相対パスを返していました。

アップロードされたファイル

アップロードされたすべてのファイルに関する情報は、$request->getFiles()を使用して取得できます。これはCodeIgniter\HTTP\Files\UploadedFileインスタンスの配列を返し、アップロードされたファイルの処理を容易にし、セキュリティリスクを最小限に抑えるためのベストプラクティスを使用します。

<?php

$files = $request->getFiles();

詳細については、アップロードされたファイルの操作を参照してください。

HTMLファイル入力で指定されたファイル名に基づいて、単独でアップロードされた単一のファイルを取得できます。

<?php

$file = $request->getFile('userfile');

HTMLファイル入力で指定されたファイル名に基づいて、複数ファイルアップロードの一部としてアップロードされた同じ名前のファイルの配列を取得できます。

<?php

$files = $request->getFileMultiple('userfile');

注記

ここのファイルは$_FILESに対応します。ユーザーがフォームの送信ボタンをクリックするだけで、ファイルをアップロードしなくても、ファイルは存在します。ファイルが実際にアップロードされたかどうかは、UploadedFileのisValid()メソッドで確認できます。詳細については、ファイルの検証を参照してください。

コンテンツネゴシエーション

negotiate()メソッドを使用して、リクエストでコンテンツタイプを簡単にネゴシエートできます。

<?php

$language    = $request->negotiate('language', ['en-US', 'en-GB', 'fr', 'es-mx']);
$imageType   = $request->negotiate('media', ['image/png', 'image/jpg']);
$charset     = $request->negotiate('charset', ['UTF-8', 'UTF-16']);
$contentType = $request->negotiate('media', ['text/html', 'text/xml']);
$encoding    = $request->negotiate('encoding', ['gzip', 'compress']);

詳細については、コンテンツネゴシエーションページを参照してください。

クラスリファレンス

注記

ここに記載されているメソッドに加えて、このクラスはRequestクラスMessageクラスからメソッドを継承します。

利用可能な親クラスによって提供されるメソッドは次のとおりです。

  • CodeIgniter\HTTP\Request::getIPAddress()

  • CodeIgniter\HTTP\Request::isValidIP()

  • CodeIgniter\HTTP\Request::getMethod()

  • CodeIgniter\HTTP\Request::setMethod()

  • CodeIgniter\HTTP\Request::getServer()

  • CodeIgniter\HTTP\Request::getEnv()

  • CodeIgniter\HTTP\Request::setGlobal()

  • CodeIgniter\HTTP\Request::fetchGlobal()

  • CodeIgniter\HTTP\Message::getBody()

  • CodeIgniter\HTTP\Message::setBody()

  • CodeIgniter\HTTP\Message::appendBody()

  • CodeIgniter\HTTP\Message::populateHeaders()

  • CodeIgniter\HTTP\Message::headers()

  • CodeIgniter\HTTP\Message::header()

  • CodeIgniter\HTTP\Message::hasHeader()

  • CodeIgniter\HTTP\Message::getHeaderLine()

  • CodeIgniter\HTTP\Message::setHeader()

  • CodeIgniter\HTTP\Message::removeHeader()

  • CodeIgniter\HTTP\Message::appendHeader()

  • CodeIgniter\HTTP\Message::prependHeader()

  • CodeIgniter\HTTP\Message::getProtocolVersion()

  • CodeIgniter\HTTP\Message::setProtocolVersion()

class CodeIgniter\HTTP\IncomingRequest
isCLI()
戻り値:

コマンドラインからリクエストが開始された場合はtrue、それ以外の場合はfalse。

戻り値の型:

bool

isAJAX()
戻り値:

リクエストがAJAXリクエストの場合はtrue、それ以外の場合はfalse。

戻り値の型:

bool

isSecure()
戻り値:

リクエストがHTTPSリクエストの場合はtrue、それ以外の場合はfalse。

戻り値の型:

bool

getVar([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (string) – 検索する変数/キーの名前。

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はフィルターの種類を参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はフィルターフラグを参照してください。

戻り値:

パラメーターが指定されていない場合は$_REQUEST、それ以外の場合はREQUEST値が見つかった場合はその値、見つからない場合はnull

戻り値の型:

array|bool|float|int|object|string|null

重要

このメソッドは下位互換性のためだけに存在します。新しいプロジェクトでは使用しないでください。既に使用している場合でも、より適切な別のメソッドを使用することをお勧めします。

このメソッドはgetGet()と同一で、REQUESTデータを取得する点が異なります。

getGet([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (string) – 検索する変数/キーの名前。

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はフィルターの種類を参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はフィルターフラグを参照してください。

戻り値:

パラメーターが指定されていない場合は$_GET、それ以外の場合はGET値が見つかった場合はその値、見つからない場合はnull

戻り値の型:

array|bool|float|int|object|string|null

最初の引数は、検索するGET項目の名前を指定します。

<?php

$request->getGet('some_data');

取得しようとしている項目が存在しない場合は、nullを返します。

2番目のオプションの引数を使用すると、PHPのフィルターを使用してデータを処理できます。目的のフィルターの種類を2番目の引数に渡します。

<?php

$request->getGet('some_data', FILTER_SANITIZE_FULL_SPECIAL_CHARS);

すべてのGET項目の配列を返すには、引数を指定せずに呼び出します。

すべてのGET項目を返し、フィルターを通過させるには、最初の引数をnullに設定し、2番目の引数に使用するフィルターを設定します。

<?php

$request->getGet(null, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
// returns all GET items with string sanitation

複数のGETパラメーターの配列を返すには、必要なキーをすべて配列として渡します。

<?php

$request->getGet(['field1', 'field2']);

同じルールが適用されます。フィルター処理してパラメーターを取得するには、2番目の引数に適用するフィルターの種類を設定します。

<?php

$request->getGet(['field1', 'field2'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
getPost([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (string) – 検索する変数/キーの名前。

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はこちらを参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はこちらを参照してください。

戻り値:

パラメーターが指定されていない場合は$_POST、それ以外の場合はPOST値が見つかった場合はその値、見つからない場合はnull

戻り値の型:

array|bool|float|int|object|string|null

このメソッドはgetGet()と同一で、POSTデータを取得する点が異なります。

getPostGet([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (string) – 検索する変数/キーの名前。

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はフィルターの種類を参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はフィルターフラグを参照してください。

戻り値:

パラメーターが指定されていない場合は$_POST$_GETを結合した値(競合する場合はPOST値を優先)、それ以外の場合はPOST値を検索し、見つからない場合はGET値を検索し、値が見つからない場合はnullを返します。

戻り値の型:

array|bool|float|int|object|string|null

このメソッドはgetPost()getGet()とほぼ同じ動作で、POSTとGETの両方のストリームからデータを検索します。最初にPOSTを、次にGETを検索します。

<?php

$request->getPostGet('field1');

インデックスが指定されていない場合、POSTとGETの両方のストリームを結合して返します。ただし、名前が競合する場合はPOSTデータが優先されます。

getGetPost([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (string) – 検索する変数/キーの名前。

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はフィルターの種類を参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はフィルターフラグを参照してください。

戻り値:

パラメーターが指定されていない場合は$_GET$_POSTを結合した値(競合する場合はGET値を優先)、それ以外の場合はGET値を検索し、見つからない場合はPOST値を検索し、値が見つからない場合はnullを返します。

戻り値の型:

array|bool|float|int|object|string|null

このメソッドはgetPost()getGet()とほぼ同じ動作で、GETとPOSTの両方のストリームからデータを検索します。最初にGETを、次にPOSTを検索します。

<?php

$request->getGetPost('field1');

インデックスが指定されていない場合、GETとPOSTの両方のストリームを結合して返します。ただし、名前が競合する場合はGETデータが優先されます。

getCookie([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (array|string|null) – COOKIE名

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はフィルターの種類を参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はフィルターフラグを参照してください。

戻り値:

パラメーターが指定されていない場合は$_COOKIE、それ以外の場合はCOOKIE値が見つかった場合はその値、見つからない場合はnull

戻り値の型:

array|bool|float|int|object|string|null

このメソッドはgetPost()getGet()と同一で、Cookieデータを取得する点が異なります。

<?php

$request->getCookie('some_cookie');
$request->getCookie('some_cookie', FILTER_SANITIZE_FULL_SPECIAL_CHARS); // with filter

複数のCookie値の配列を返すには、必要なキーをすべて配列として渡します。

<?php

$request->getCookie(['some_cookie', 'some_cookie2']);

注記

Cookieヘルパー関数get_cookie()とは異なり、このメソッドは設定されたConfig\Cookie::$prefix値を先頭に付けません。

getServer([$index = null[, $filter = null[, $flags = null]]])
パラメータ:
  • $index (array|string|null) – 値の名前

  • $filter (int) – 適用するフィルターの種類。フィルターの一覧はフィルターの種類を参照してください。

  • $flags (int) – 適用するフラグ。フラグの一覧はフィルターフラグを参照してください。

戻り値:

見つかった場合は$_SERVER項目の値、見つからない場合はnull

戻り値の型:

array|bool|float|int|object|string|null

このメソッドはgetPost()getGet()getCookie()メソッドと同一で、サーバーデータ($_SERVER)を取得する点が異なります。

<?php

$request->getServer('some_data');

複数の$_SERVER値の配列を返すには、必要なキーをすべて配列として渡します。

<?php

$request->getServer(['SERVER_PROTOCOL', 'REQUEST_URI']);
getUserAgent()
戻り値:

サーバーデータにあるユーザーエージェント文字列。見つからない場合はnull。

戻り値の型:

CodeIgniter\HTTP\UserAgent

このメソッドは、サーバーデータからユーザーエージェントインスタンスを返します。

<?php

$request->getUserAgent();
getPath()
戻り値:

baseURLを基準とした現在のURIパス

戻り値の型:

string

このメソッドは、baseURLを基準とした現在のURIパスを返します。

注記

v4.4.0より前では、IncomingRequest::$uriはベースURLの完全なアプリケーション設定を認識していない可能性があるため、「現在のURI」を決定する最も安全な方法でした。

setPath($path)

バージョン4.4.0以降非推奨。

パラメータ:
  • $path (string) – 現在のURIとして使用する相対パス

戻り値:

このIncoming Request

戻り値の型:

IncomingRequest

注記

v4.4.0より前では、主にテスト目的で使用され、URI検出に依存せずに現在のリクエストの相対パス値を設定できました。これにより、基盤となるURIインスタンスも新しいパスで更新されました。