クラス yii\web\Request
継承 | yii\web\Request » yii\base\Request » yii\base\Component » yii\base\BaseObject |
---|---|
実装 | yii\base\Configurable |
利用可能なバージョン | 2.0 |
ソースコード | https://github.com/yiisoft/yii2/blob/master/framework/web/Request.php |
Web Request クラスは、HTTP リクエストを表します。
$_SERVER 変数をカプセル化し、異なる Web サーバー間の不一致を解決します。また、$_POST、$_GET、$_COOKIES、およびPUTやDELETEなどの他のHTTPメソッドで送信されたRESTパラメータからリクエストパラメータを取得するためのインターフェースを提供します。
Request は、デフォルトでyii\web\Applicationでアプリケーションコンポーネントとして構成されています。`Yii::$app->request` を通じてそのインスタンスにアクセスできます。
Requestの詳細と使用方法については、リクエストに関するガイド記事を参照してください。(※原文は英語記事へのリンクです。日本語訳記事があればそちらへのリンクに置き換えるべきです)
公開プロパティ
公開メソッド
保護されたメソッド
メソッド | 説明 | 定義元 |
---|---|---|
createCsrfCookie() | ランダムに生成されたCSRFトークンを含むCookieを作成します。 | yii\web\Request |
filterHeaders() | $trustedHostsに従ってヘッダーをフィルタリングします。 | yii\web\Request |
generateCsrfToken() | CSRF検証に使用するマスクされていないランダムトークンを生成します。 | yii\web\Request |
getIpValidator() | yii\validators\IpValidatorのインスタンスを作成します。 | yii\web\Request |
getSecureForwardedHeaderParts() | デコードされた転送ヘッダーを返します。 | yii\web\Request |
getSecureForwardedHeaderTrustedPart() | トークンの最初のForwarded ヘッダー値を取得します。 |
yii\web\Request |
getSecureForwardedHeaderTrustedParts() | 信頼できるForwarded ヘッダー部分のみを取得します。 |
yii\web\Request |
getTrustedHeaders() | $trustedHostsに従って信頼できるヘッダー。 | yii\web\Request |
getUserIpFromIpHeader() | IPヘッダーからユーザーIPを返します。 | yii\web\Request |
getUserIpFromIpHeaders() | $ipHeadersからユーザーIPアドレスを返します。 | yii\web\Request |
loadCookies() | $_COOKIE をyii\web\Cookieの配列に変換します。 |
yii\web\Request |
loadCsrfToken() | CookieまたはセッションからCSRFトークンを読み込みます。 | yii\web\Request |
resolvePathInfo() | 現在要求されているURLのパス情報部分を解決します。 | yii\web\Request |
resolveRequestUri() | 現在要求されているURLのリクエストURI部分を解決します。 | yii\web\Request |
定数
定数 | 値 | 説明 | 定義元 |
---|---|---|---|
CSRF_HEADER | 'X-CSRF-Token' | CSRFトークンを送信するためのHTTPヘッダーの名前。 | yii\web\Request |
CSRF_MASK_LENGTH | 8 | CSRFトークンマスクの長さ。 **2.0.12以降非推奨。マスクの長さは現在トークンの長さと同じです。** | yii\web\Request |
プロパティの詳細
品質スコア順に並べられたコンテンツタイプ。スコアの高いタイプが最初に返されます。配列のキーはコンテンツタイプ、配列の値は対応する品質スコアと、ヘッダーに指定されているその他のパラメータです。
優先順位に従ってソートされた言語リスト。最初の要素が最も優先度の高い言語を表します。
正確に2つの要素を含む配列: - 0: HTTP認証で送信されたユーザー名、ユーザー名が指定されていない場合はnull
- 1: HTTP認証で送信されたパスワード、パスワードが指定されていない場合はnull
。
HTTP認証で送信されたパスワード、パスワードが指定されていない場合はnull
。
HTTP認証で送信されたユーザー名、ユーザー名が指定されていない場合はnull
。
リクエストのコンテンツタイプ。この情報が利用できない場合は空文字列が返されます。
$enableCsrfValidation と $enableCsrfCookie の両方が true の場合にのみ使用される、CSRF Cookie 作成のための設定。
CSRF 攻撃を防ぐために使用されるトークンの名前。デフォルトは '_csrf'。このプロパティは、$enableCsrfValidation が true の場合にのみ使用されます。
ブラウザからCSRF_HEADERを介して送信されたCSRFトークン。ヘッダーが送信されていない場合はnullが返されます。
Cookieが改ざんされていないことを検証するかどうかを指定します。デフォルトはtrueです。
CSRFトークンを永続化するためにCookieを使用するかどうかを指定します。falseの場合、CSRFトークンは$csrfParamの名前でセッションに保存されます。セッションにCSRFトークンを保存するとセキュリティが向上しますが、すべてのページでセッションを開始する必要があるため、サイトのパフォーマンスが低下します。
CSRF(クロスサイトリクエストフォージェリ)検証を有効にするかどうかを指定します。デフォルトはtrueです。CSRF検証が有効になっている場合、Yii Webアプリケーションに送信されるフォームは、同じアプリケーションから発信されている必要があります。そうでない場合、400 HTTP例外が発生します。
この機能を使用するには、ユーザーのクライアントがCookieを受け入れる必要があります。また、この機能を使用するには、POSTメソッドで送信されるフォームに、$csrfParamで指定された名前の隠し入力を含める必要があります。yii\helpers\Html::beginForm()を使用してこの隠し入力を生成できます。
JavaScriptでは、$csrfParamと$csrfTokenの値をそれぞれyii.getCsrfParam()
とyii.getCsrfToken()
で取得できます。yii\web\YiiAssetアセットを登録する必要があります。また、yii\helpers\Html::csrfMetaTags()を使用して、ページにCSRFメタタグを含める必要があります。
参照
リクエストURLのスキームとホスト名部分(必要に応じてポート番号を含む)(例:https://yii.dokyumento.jp
)。`$_SERVER`から取得できない場合、または設定されていない場合はnullです。getHostInfo()で、このプロパティに関するセキュリティ上の注意を参照してください。
リクエストURLのホスト名部分(例:`www.yiiframework.com`)。
プロキシが実際のクライアントIPを格納するヘッダーのリストです。安全でないヘッダーをここに配置することはお勧めできません。RFC 7239に従って`Forwarded`ヘッダーを使用するには、ヘッダーを$secureHeadersリストに追加する必要があります。ヘッダー名の照合は大文字と小文字を区別しません。
参照
リクエストがセキュアチャネル(https)を介して送信された場合。
リクエストメソッド(例:GET、POST、HEAD、PUT、PATCH、DELETE)。返される値は大文字に変換されます。
POSTリクエストを介してPUT、PATCH、DELETEリクエストがトンネリングされているかどうかを示すために使用されるPOSTパラメータの名前。デフォルトは'_method'です。
参照
生のHTTPリクエストボディを$bodyParamsに変換するためのパーサー。配列のキーはリクエストのContent-Types
であり、配列の値はパーサーオブジェクトの作成に関する対応する設定です。パーサーはyii\web\RequestParserInterfaceを実装する必要があります。
JSONリクエストの解析を有効にするには、次の例のようにyii\web\JsonParserクラスを使用できます。
[
'application/json' => 'yii\web\JsonParser',
]
すべてのリクエストタイプを解析するためのパーサーを登録するには、配列キーとして'*'
を使用できます。これは、他のタイプが一致しない場合のフォールバックとして使用されます。
getBodyParams()も参照してください。
エントリスクリプトの後、疑問符の前にあるリクエストURLの一部。返されるパス情報は既にURLデコードされています。
プロキシが実際の要求ポートを格納するヘッダーのリストです。安全でないヘッダーをここに配置することはお勧めしません。「Forwarded Port」を使用するには、ヘッダーを$secureHeadersリストに追加する必要があります。ヘッダー名の照合は大文字と小文字を区別しません。
参照
アプリケーションが使用する言語。
デフォルトで信頼できるホスト設定の対象となるヘッダーのリストです。$trustedHostsで明示的に許可されていない限り、これらのヘッダーはフィルタリングされます。「Forwarded」ヘッダーが含まれている場合、処理はRFC 7239に従って行われます。ヘッダー名の照合は大文字と小文字を区別しません。
参照
'X-Forwarded-For',
'X-Forwarded-Host',
'X-Forwarded-Proto',
'X-Forwarded-Port',
'Front-End-Https',
'X-Rewrite-Url',
'X-Original-Host',
]
接続がHTTPSを介して行われたかどうかを判断するために確認するヘッダーのリストです。配列のキーはヘッダー名であり、配列の値は安全な接続を示すヘッダー値のリストです。ヘッダー名と値の照合は大文字と小文字を区別しません。安全でないヘッダーをここに配置することはお勧めしません。
参照
'X-Forwarded-Proto' => [
'https',
],
'Front-End-Https' => [
'on',
],
]
信頼できるセキュリティ関連ヘッダーの設定。
配列のキーは、クライアントとの照合のためのCIDR表記のIPv4またはIPv6のIPアドレスです。
配列の値は、信頼するヘッダーのリストです。これらは$secureHeadersと照合され、指定されたホストによって送信が許可されるヘッダーが決定されます。ヘッダー名のケースは、$secureHeadersで指定されたものと一致する必要があります。
例えば、`192.168.0.0-192.168.0.254`の範囲のIPアドレスに対して$secureHeadersにリストされているすべてのヘッダーを信頼するには、次のように記述します。
[
'192.168.0.0/24',
]
`10.0.0.1`からの`X-Forwarded-For`ヘッダーのみを信頼するには、次のように使用します。
[
'10.0.0.1' => ['X-Forwarded-For']
]
デフォルトでは、すべてのホストからの$secureHeadersにリストされているヘッダーを除くすべてのヘッダーを信頼します。一致は順番に試行され、IPが一致すると検索が停止します。
情報: 照合はyii\validators\IpValidatorを使用して実行されます。IpValidator::::setRanges()とyii\validators\IpValidator::$networksを参照して、高度な照合について確認してください。
$secureHeadersも参照してください。
現在要求されている相対URLです。返されるURIは、クライアントに応じてURLエンコードされている場合があります。
メソッドの詳細
定義されている場所: yii\base\Component::__call()
クラスメソッドではない、指定されたメソッドを呼び出します。
このメソッドは、アタッチされているビヘイビアに指定されたメソッドがあるかどうかを確認し、利用可能な場合は実行します。
これはPHPのマジックメソッドであり、不明なメソッドが呼び出されたときに暗黙的に呼び出されるため、直接呼び出さないでください。
public mixed __call ( $name, $params ) | ||
$name | string |
メソッド名 |
$params | array |
メソッドパラメータ |
戻り値 | mixed |
メソッドの戻り値 |
---|---|---|
例外 | yii\base\UnknownMethodException |
不明なメソッドを呼び出した場合 |
public function __call($name, $params)
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
定義されている場所: yii\base\Component::__clone()
既存のオブジェクトを複製してオブジェクトが作成された後に、このメソッドが呼び出されます。
古いオブジェクトにアタッチされているため、すべてのビヘイビアを削除します。
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
定義されている場所: yii\base\BaseObject::__construct()
コンストラクタ。
デフォルトの実装では、次の2つのことを行います。
- 指定された構成`$config`を使用してオブジェクトを初期化します。
- init()を呼び出します。
このメソッドを子クラスでオーバーライドする場合は、
- コンストラクタの最後のパラメータを構成配列(ここでは`$config`)にすることをお勧めします。
- コンストラクタの最後に親の実装を呼び出してください。
public void __construct ( $config = [] ) | ||
$config | array |
オブジェクトのプロパティを初期化するために使用される名前と値のペア |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定義されている場所: yii\base\Component::__get()
コンポーネントプロパティの値を返します。
このメソッドは、以下の順序でチェックを行い、それに応じて動作します。
- ゲッターによって定義されたプロパティ: ゲッターの結果を返します。
- ビヘイビアのプロパティ: ビヘイビアのプロパティの値を返します。
これはPHPのマジックメソッドであり、`$value = $component->property;`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。
こちらも参照してください __set().
public mixed __get ( $name ) | ||
$name | string |
プロパティ名 |
戻り値 | mixed |
プロパティの値、またはビヘイビアのプロパティの値 |
---|---|---|
例外 | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
例外 | yii\base\InvalidCallException |
プロパティが書き込み専用の場合。 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
// read property, e.g. getName()
return $this->$getter();
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name;
}
}
if (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定義されている場所: yii\base\Component::__isset()
プロパティが設定されているか(定義されていてnullでないか)を確認します。
このメソッドは、以下の順序でチェックを行い、それに応じて動作します。
- セッターによって定義されたプロパティ: プロパティが設定されているかどうかを返します。
- ビヘイビアのプロパティ: プロパティが設定されているかどうかを返します。
- 存在しないプロパティの場合は`false`を返します。
これはPHPのマジックメソッドであり、`isset($component->property)`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。
こちらも参照してください https://www.php.net/manual/en/function.isset.php.
public boolean __isset ( $name ) | ||
$name | string |
プロパティ名またはイベント名 |
戻り値 | boolean |
指定されたプロパティが設定されているかどうか |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name !== null;
}
}
return false;
}
定義されている場所: yii\base\Component::__set()
コンポーネントプロパティの値を設定します。
このメソッドは、以下の順序でチェックを行い、それに応じて動作します。
- セッターによって定義されたプロパティ: プロパティの値を設定します。
- "on xyz"形式のイベント: "xyz"イベントにハンドラーをアタッチします。
- "as xyz"形式のビヘイビア: "xyz"という名前のビヘイビアをアタッチします。
- ビヘイビアのプロパティ: ビヘイビアのプロパティの値を設定します。
これはPHPのマジックメソッドであり、`$component->property = $value;`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。
こちらも参照してください __get().
public void __set ( $name, $value ) | ||
$name | string |
プロパティ名またはイベント名 |
$value | mixed |
プロパティの値 |
例外 | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
---|---|---|
例外 | yii\base\InvalidCallException |
プロパティが読み取り専用の場合。 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
// set property
$this->$setter($value);
return;
} elseif (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
} elseif (strncmp($name, 'as ', 3) === 0) {
// as behavior: attach behavior
$name = trim(substr($name, 3));
$this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = $value;
return;
}
}
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
定義されている場所: yii\base\Component::__unset()
コンポーネントプロパティをnullに設定します。
このメソッドは、以下の順序でチェックを行い、それに応じて動作します。
- セッターによって定義されたプロパティ: プロパティの値をnullに設定します。
- ビヘイビアのプロパティ: プロパティの値をnullに設定します。
これはPHPのマジックメソッドであり、`unset($component->property)`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。
こちらも参照してください https://www.php.net/manual/en/function.unset.php.
public void __unset ( $name ) | ||
$name | string |
プロパティ名 |
例外 | yii\base\InvalidCallException |
プロパティが読み取り専用の場合。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = null;
return;
}
}
throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}
定義されている場所: yii\base\Component::attachBehavior()
このコンポーネントにビヘイビアをアタッチします。
このメソッドは、指定された設定に基づいてビヘイビアオブジェクトを作成します。その後、yii\base\Behavior::attach()メソッドを呼び出すことで、ビヘイビアオブジェクトがこのコンポーネントにアタッチされます。
こちらも参照してください detachBehavior().
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
ビヘイビアの名前。 |
$behavior | string|array|yii\base\Behavior |
ビヘイビアの設定。以下のいずれかになります。
|
戻り値 | yii\base\Behavior |
ビヘイビアオブジェクト |
---|
public function attachBehavior($name, $behavior)
{
$this->ensureBehaviors();
return $this->attachBehaviorInternal($name, $behavior);
}
定義されている場所: yii\base\Component::attachBehaviors()
コンポーネントにビヘイビアのリストをアタッチします。
各ビヘイビアは名前でインデックスされており、yii\base\Behaviorオブジェクト、ビヘイビアクラスを指定する文字列、またはビヘイビアを作成するための設定配列である必要があります。
こちらも参照してください attachBehavior().
public void attachBehaviors ( $behaviors ) | ||
$behaviors | array |
コンポーネントにアタッチされるビヘイビアのリスト |
public function attachBehaviors($behaviors)
{
$this->ensureBehaviors();
foreach ($behaviors as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
定義されている場所: yii\base\Component::behaviors()
このコンポーネントが備えるべきビヘイビアのリストを返します。
子クラスでは、このメソッドをオーバーライドして、ビヘイビアとして動作させたいビヘイビアを指定できます。
このメソッドの戻り値は、ビヘイビア名でインデックスされたビヘイビアオブジェクトまたは設定の配列である必要があります。ビヘイビアの設定は、ビヘイビアクラスを指定する文字列、または以下の構造の配列のいずれかになります。
'behaviorName' => [
'class' => 'BehaviorClass',
'property1' => 'value1',
'property2' => 'value2',
]
ビヘイビアクラスはyii\base\Behaviorを拡張する必要があることに注意してください。ビヘイビアは名前付きで、または匿名でアタッチできます。配列キーとして名前を使用する場合、この名前を使用して、getBehavior()を使用してビヘイビアを取得したり、detachBehavior()を使用してビヘイビアをデタッチしたりできます。匿名ビヘイビアは取得またはデタッチできません。
このメソッドで宣言されたビヘイビアは、コンポーネントに自動的に(オンデマンドで)アタッチされます。
public array behaviors ( ) | ||
戻り値 | array |
ビヘイビアの設定。 |
---|
public function behaviors()
{
return [];
}
定義されている場所: yii\base\Component::canGetProperty()
プロパティを読み取ることができるかどうかを示す値を返します。
プロパティは、以下の場合に読み取ることができます。
- クラスに、指定された名前に関連付けられたゲッターメソッドがある場合(この場合、プロパティ名はケースインセンシティブです)。
- クラスに、指定された名前のメンバ変数がある場合(`$checkVars`がtrueの場合)。
- アタッチされたビヘイビアに、指定された名前の読み取り可能なプロパティがある場合(`$checkBehaviors`がtrueの場合)。
こちらも参照してください canSetProperty().
public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバ変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
戻り値 | boolean |
プロパティを読み取ることができるかどうか |
---|
public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
定義位置: yii\base\Component::canSetProperty()
プロパティを設定できるかどうかを示す値を返します。
プロパティに値を書き込める条件は以下のとおりです。
- 指定された名前(この場合、プロパティ名は大小文字を区別しません)に関連付けられたセッターメソッドがクラスに存在する場合。
- クラスに、指定された名前のメンバ変数がある場合(`$checkVars`がtrueの場合)。
- アタッチされたビヘイビアに、指定された名前の書き込み可能なプロパティが存在する場合(
$checkBehaviors
がtrueの場合)。
こちらも参照してください canGetProperty().
public boolean canSetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバ変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
戻り値 | boolean |
プロパティに値を書き込めるかどうか |
---|
public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
::class
を使用してください。
定義位置: yii\base\BaseObject::className()
このクラスの完全修飾名を返します。
public static string className ( ) | ||
戻り値 | string |
このクラスの完全修飾名。 |
---|
public static function className()
{
return get_called_class();
}
ランダムに生成されたCSRFトークンを含むCookieを作成します。
$csrfCookieで指定された初期値が生成されたCookieに適用されます。
こちらも参照してください $enableCsrfValidation.
protected yii\web\Cookie createCsrfCookie ( $token ) | ||
$token | string |
CSRFトークン |
戻り値 | yii\web\Cookie |
生成されたCookie |
---|
protected function createCsrfCookie($token)
{
$options = $this->csrfCookie;
return Yii::createObject(array_merge($options, [
'class' => 'yii\web\Cookie',
'name' => $this->csrfParam,
'value' => $token,
]));
}
定義位置: yii\base\Component::detachBehavior()
コンポーネントからビヘイビアをデタッチします。
ビヘイビアのyii\base\Behavior::detach()メソッドが呼び出されます。
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
ビヘイビアの名前。 |
戻り値 | yii\base\Behavior|null |
デタッチされたビヘイビア。ビヘイビアが存在しない場合はNull。 |
---|
public function detachBehavior($name)
{
$this->ensureBehaviors();
if (isset($this->_behaviors[$name])) {
$behavior = $this->_behaviors[$name];
unset($this->_behaviors[$name]);
$behavior->detach();
return $behavior;
}
return null;
}
定義位置: yii\base\Component::detachBehaviors()
コンポーネントからすべてのビヘイビアをデタッチします。
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
定義位置: yii\base\Component::ensureBehaviors()
behaviors()で宣言されたビヘイビアがこのコンポーネントにアタッチされていることを確認します。
public void ensureBehaviors ( ) |
public function ensureBehaviors()
{
if ($this->_behaviors === null) {
$this->_behaviors = [];
foreach ($this->behaviors() as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
}
$trustedHostsに従ってヘッダーをフィルタリングします。
protected void filterHeaders ( yii\web\HeaderCollection $headerCollection ) | ||
$headerCollection | yii\web\HeaderCollection |
protected function filterHeaders(HeaderCollection $headerCollection)
{
$trustedHeaders = $this->getTrustedHeaders();
// remove all secure headers unless they are trusted
foreach ($this->secureHeaders as $secureHeader) {
if (!in_array($secureHeader, $trustedHeaders)) {
$headerCollection->remove($secureHeader);
}
}
}
CSRF検証に使用するマスクされていないランダムトークンを生成します。
protected string generateCsrfToken ( ) | ||
戻り値 | string |
CSRF検証のためのランダムトークン。 |
---|
protected function generateCsrfToken()
{
$token = Yii::$app->getSecurity()->generateRandomString();
if ($this->enableCsrfCookie) {
$cookie = $this->createCsrfCookie($token);
Yii::$app->getResponse()->getCookies()->add($cookie);
} else {
Yii::$app->getSession()->set($this->csrfParam, $token);
}
return $token;
}
指定された名前のGETパラメータを返します。名前が指定されていない場合は、すべてのGETパラメータの配列を返します。
public array|mixed get ( $name = null, $defaultValue = null ) | ||
$name | string |
パラメータ名 |
$defaultValue | mixed |
パラメータが存在しない場合のデフォルトのパラメータ値。 |
public function get($name = null, $defaultValue = null)
{
if ($name === null) {
return $this->getQueryParams();
}
return $this->getQueryParam($name, $defaultValue);
}
public string getAbsoluteUrl ( ) | ||
戻り値 | string |
現在リクエストされている絶対URL。 |
---|
public function getAbsoluteUrl()
{
return $this->getHostInfo() . $this->getUrl();
}
エンドユーザーが許容するコンテンツタイプを返します。
これは、Accept
HTTPヘッダーによって決定されます。例えば、
$_SERVER['HTTP_ACCEPT'] = 'text/plain; q=0.5, application/json; version=1.0, application/xml; version=2.0;';
$types = $request->getAcceptableContentTypes();
print_r($types);
// displays:
// [
// 'application/json' => ['q' => 1, 'version' => '1.0'],
// 'application/xml' => ['q' => 1, 'version' => '2.0'],
// 'text/plain' => ['q' => 0.5],
// ]
public array getAcceptableContentTypes ( ) | ||
戻り値 | array |
品質スコア順に並べられたコンテンツタイプ。スコアの高いタイプが最初に返されます。配列のキーはコンテンツタイプ、配列の値は対応する品質スコアと、ヘッダーに指定されているその他のパラメータです。 |
---|
public function getAcceptableContentTypes()
{
if ($this->_contentTypes === null) {
if ($this->headers->get('Accept') !== null) {
$this->_contentTypes = $this->parseAcceptHeader($this->headers->get('Accept'));
} else {
$this->_contentTypes = [];
}
}
return $this->_contentTypes;
}
エンドユーザーが許容する言語を返します。
これは、Accept-Language
HTTPヘッダーによって決定されます。
public array getAcceptableLanguages ( ) | ||
戻り値 | array |
優先順位に従ってソートされた言語リスト。最初の要素が最も優先度の高い言語を表します。 |
---|
public function getAcceptableLanguages()
{
if ($this->_languages === null) {
if ($this->headers->has('Accept-Language')) {
$this->_languages = array_keys($this->parseAcceptHeader($this->headers->get('Accept-Language')));
} else {
$this->_languages = [];
}
}
return $this->_languages;
}
public array getAuthCredentials ( ) | ||
戻り値 | array |
正確に2つの要素を含む配列を返します。
|
---|
public function getAuthCredentials()
{
$username = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null;
$password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null;
if ($username !== null || $password !== null) {
return [$username, $password];
}
/**
* Apache with php-cgi does not pass HTTP Basic authentication to PHP by default.
* To make it work, add one of the following lines to to your .htaccess file:
*
* SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
* --OR--
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
*/
$auth_token = $this->getHeaders()->get('Authorization');
if ($auth_token !== null && strncasecmp($auth_token, 'basic', 5) === 0) {
$parts = array_map(function ($value) {
return strlen($value) === 0 ? null : $value;
}, explode(':', base64_decode(mb_substr($auth_token, 6)), 2));
if (count($parts) < 2) {
return [$parts[0], null];
}
return $parts;
}
return [null, null];
}
ユーザー名とパスワードを一度に取得するには、getAuthCredentials()も参照してください。
public string|null getAuthPassword ( ) | ||
戻り値 | string|null |
HTTP認証を介して送信されたパスワード。パスワードが指定されていない場合は |
---|
public function getAuthPassword()
{
return $this->getAuthCredentials()[1];
}
ユーザー名とパスワードを一度に取得するには、getAuthCredentials()も参照してください。
public string|null getAuthUser ( ) | ||
戻り値 | string|null |
HTTP認証を介して送信されたユーザー名。ユーザー名が指定されていない場合は |
---|
public function getAuthUser()
{
return $this->getAuthCredentials()[0];
}
public string getBaseUrl ( ) | ||
戻り値 | string |
アプリケーションの相対URL |
---|
public function getBaseUrl()
{
if ($this->_baseUrl === null) {
$this->_baseUrl = rtrim(dirname($this->getScriptUrl()), '\\/');
}
return $this->_baseUrl;
}
定義されている場所: yii\base\Component::getBehavior()
指定された名前のビヘイビアオブジェクトを返します。
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
ビヘイビア名 |
戻り値 | yii\base\Behavior|null |
ビヘイビアオブジェクト。ビヘイビアが存在しない場合はnull |
---|
public function getBehavior($name)
{
$this->ensureBehaviors();
return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}
定義されている場所: yii\base\Component::getBehaviors()
このコンポーネントにアタッチされているすべてのビヘイビアを返します。
public yii\base\Behavior[] getBehaviors ( ) | ||
戻り値 | yii\base\Behavior[] |
このコンポーネントにアタッチされているビヘイビアのリスト |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
指定された名前のリクエストボディパラメータの値を返します。
パラメータが存在しない場合、このメソッドに渡された2番目のパラメータが返されます。
参照
public mixed getBodyParam ( $name, $defaultValue = null ) | ||
$name | string |
パラメータ名 |
$defaultValue | mixed |
パラメータが存在しない場合のデフォルトのパラメータ値。 |
戻り値 | mixed |
パラメータ値 |
---|
public function getBodyParam($name, $defaultValue = null)
{
$params = $this->getBodyParams();
if (is_object($params)) {
// unable to use `ArrayHelper::getValue()` due to different dots in key logic and lack of exception handling
try {
return isset($params->{$name}) ? $params->{$name} : $defaultValue;
} catch (\Exception $e) {
return $defaultValue;
}
}
return isset($params[$name]) ? $params[$name] : $defaultValue;
}
リクエストボディで指定されたリクエストパラメータを返します。
$parsersプロパティで設定されたパーサーを使用してリクエストパラメータが決定されます。現在の$contentTypeにパーサーが設定されていない場合、PHP関数mb_parse_str()
を使用してリクエストボディを解析します。
参照
public array|object getBodyParams ( ) | ||
戻り値 | array|object |
リクエストボディで指定されたリクエストパラメータ。 |
---|---|---|
例外 | yii\base\InvalidConfigException |
登録されたパーサーがyii\web\RequestParserInterfaceを実装していない場合。 |
public function getBodyParams()
{
if ($this->_bodyParams === null) {
if (isset($_POST[$this->methodParam])) {
$this->_bodyParams = $_POST;
unset($this->_bodyParams[$this->methodParam]);
return $this->_bodyParams;
}
$rawContentType = $this->getContentType();
if (($pos = strpos((string)$rawContentType, ';')) !== false) {
// e.g. text/html; charset=UTF-8
$contentType = substr($rawContentType, 0, $pos);
} else {
$contentType = $rawContentType;
}
if (isset($this->parsers[$contentType])) {
$parser = Yii::createObject($this->parsers[$contentType]);
if (!($parser instanceof RequestParserInterface)) {
throw new InvalidConfigException("The '$contentType' request parser is invalid. It must implement the yii\\web\\RequestParserInterface.");
}
$this->_bodyParams = $parser->parse($this->getRawBody(), $rawContentType);
} elseif (isset($this->parsers['*'])) {
$parser = Yii::createObject($this->parsers['*']);
if (!($parser instanceof RequestParserInterface)) {
throw new InvalidConfigException('The fallback request parser is invalid. It must implement the yii\\web\\RequestParserInterface.');
}
$this->_bodyParams = $parser->parse($this->getRawBody(), $rawContentType);
} elseif ($this->getMethod() === 'POST') {
// PHP has already parsed the body so we have all params in $_POST
$this->_bodyParams = $_POST;
} else {
$this->_bodyParams = [];
mb_parse_str($this->getRawBody(), $this->_bodyParams);
}
}
return $this->_bodyParams;
}
リクエストのコンテンツタイプを返します。Content-Typeヘッダーフィールドは、getRawBody()に含まれるデータのMIMEタイプを示します。HEADメソッドの場合は、リクエストがGETであった場合に送信されていたであろうメディアタイプを示します。
ユーザーがレスポンスで期待するMIMEタイプについては、$acceptableContentTypesを参照してください。
public string getContentType ( ) | ||
戻り値 | string |
リクエストのコンテンツタイプ。この情報が利用できない場合は空文字列が返されます。 |
---|
public function getContentType()
{
if (isset($_SERVER['CONTENT_TYPE'])) {
return $_SERVER['CONTENT_TYPE'];
}
//fix bug https://bugs.php.net/bug.php?id=66606
return $this->headers->get('Content-Type') ?: '';
}
Cookieコレクションを返します。
返されたCookieコレクションを通じて、次の構文を使用してCookieにアクセスできます。
$cookie = $request->cookies['name']
if ($cookie !== null) {
$value = $cookie->value;
}
// alternatively
$value = $request->cookies->getValue('name');
public yii\web\CookieCollection getCookies ( ) | ||
戻り値 | yii\web\CookieCollection |
Cookieコレクション。 |
---|
public function getCookies()
{
if ($this->_cookies === null) {
$this->_cookies = new CookieCollection($this->loadCookies(), [
'readOnly' => true,
]);
}
return $this->_cookies;
}
CSRF検証に使用するトークンを返します。
このトークンは、BREACH攻撃を防ぐ方法で生成されます。CSRF検証をサポートするために、HTMLフォームの非表示フィールドまたはHTTPヘッダー値を介して渡すことができます。
public string getCsrfToken ( $regenerate = false ) | ||
$regenerate | boolean |
CSRFトークンを再生成するかどうか。このパラメータがtrueの場合、このメソッドが呼び出されるたびに、新しいCSRFトークンが生成され、永続化されます(セッションまたはCookieに)。 |
戻り値 | string |
CSRF検証を実行するために使用されるトークン。 |
---|
public function getCsrfToken($regenerate = false)
{
if ($this->_csrfToken === null || $regenerate) {
$token = $this->loadCsrfToken();
if ($regenerate || empty($token)) {
$token = $this->generateCsrfToken();
}
$this->_csrfToken = Yii::$app->security->maskToken($token);
}
return $this->_csrfToken;
}
public string|null getCsrfTokenFromHeader ( ) | ||
戻り値 | string|null |
ブラウザからCSRF_HEADERを介して送信されたCSRFトークン。ヘッダーが送信されていない場合はnullが返されます。 |
---|
public function getCsrfTokenFromHeader()
{
return $this->headers->get(static::CSRF_HEADER);
}
ETagを取得します。
public array getETags ( ) | ||
戻り値 | array |
エンティティタグ |
---|
public function getETags()
{
if ($this->headers->has('If-None-Match')) {
return preg_split('/[\s,]+/', str_replace('-gzip', '', $this->headers->get('If-None-Match')), -1, PREG_SPLIT_NO_EMPTY);
}
return [];
}
ヘッダーコレクションを返します。
ヘッダーコレクションには、受信したHTTPヘッダーが含まれています。
public yii\web\HeaderCollection getHeaders ( ) | ||
戻り値 | yii\web\HeaderCollection |
ヘッダーコレクション |
---|
public function getHeaders()
{
if ($this->_headers === null) {
$this->_headers = new HeaderCollection();
if (function_exists('getallheaders')) {
$headers = getallheaders();
foreach ($headers as $name => $value) {
$this->_headers->add($name, $value);
}
} elseif (function_exists('http_get_request_headers')) {
$headers = http_get_request_headers();
foreach ($headers as $name => $value) {
$this->_headers->add($name, $value);
}
} else {
// ['prefix' => length]
$headerPrefixes = ['HTTP_' => 5, 'REDIRECT_HTTP_' => 14];
foreach ($_SERVER as $name => $value) {
foreach ($headerPrefixes as $prefix => $length) {
if (strncmp($name, $prefix, $length) === 0) {
$name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, $length)))));
$this->_headers->add($name, $value);
continue 2;
}
}
}
}
$this->filterHeaders($this->_headers);
}
return $this->_headers;
}
現在のリクエストURLのスキーマとホスト部分を返します。
返されるURLには、末尾のスラッシュがありません。
デフォルトでは、この値はユーザーのリクエスト情報に基づいています。このメソッドは、利用可能な場合は`$_SERVER['HTTP_HOST']`の値を、利用できない場合は`$_SERVER['SERVER_NAME']`の値を返します。これらの変数に関する詳細は、PHPドキュメントを参照してください。
hostInfoプロパティを設定することで、明示的に指定できます。
警告: サーバーの設定によっては、この情報は信頼できない可能性があり、HTTPリクエストを送信するユーザーによって偽造される可能性があります。Webサーバーが`Host`ヘッダーの値に関係なく同じサイトを提供するように構成されている場合、この値は信頼できません。このような状況では、Webサーバーの設定を修正するか、hostInfoプロパティを設定して値を明示的に設定する必要があります。サーバー設定にアクセスできない場合は、アプリケーションレベルでyii\filters\HostControlフィルターを設定して、このような攻撃から保護することができます。
setHostInfo()も参照してください。
public string|null getHostInfo ( ) | ||
戻り値 | string|null |
リクエストURLのスキーマとホスト名部分(必要に応じてポート番号付き)(例:`https://yii.dokyumento.jp`)、`$_SERVER`から取得できず、設定されていない場合はnull。 |
---|
public function getHostInfo()
{
if ($this->_hostInfo === null) {
$secure = $this->getIsSecureConnection();
$http = $secure ? 'https' : 'http';
if ($this->getSecureForwardedHeaderTrustedPart('host') !== null) {
$this->_hostInfo = $http . '://' . $this->getSecureForwardedHeaderTrustedPart('host');
} elseif ($this->headers->has('X-Forwarded-Host')) {
$this->_hostInfo = $http . '://' . trim(explode(',', $this->headers->get('X-Forwarded-Host'))[0]);
} elseif ($this->headers->has('X-Original-Host')) {
$this->_hostInfo = $http . '://' . trim(explode(',', $this->headers->get('X-Original-Host'))[0]);
} elseif ($this->headers->has('Host')) {
$this->_hostInfo = $http . '://' . $this->headers->get('Host');
} elseif (isset($_SERVER['SERVER_NAME'])) {
$this->_hostInfo = $http . '://' . $_SERVER['SERVER_NAME'];
$port = $secure ? $this->getSecurePort() : $this->getPort();
if (($port !== 80 && !$secure) || ($port !== 443 && $secure)) {
$this->_hostInfo .= ':' . $port;
}
}
}
return $this->_hostInfo;
}
現在のリクエストURLのホスト部分を返します。
現在のhostInfoプロパティから計算された値です。
警告: サーバーの設定によっては、この値の内容は信頼できない可能性があります。getHostInfo()を参照してください。
getHostInfo()も参照してください。
public string|null getHostName ( ) | ||
戻り値 | string|null |
リクエストURLのホスト名部分(例:`www.yiiframework.com`) |
---|
public function getHostName()
{
if ($this->_hostName === null) {
$this->_hostName = parse_url((string)$this->getHostInfo(), PHP_URL_HOST);
}
return $this->_hostName;
}
yii\validators\IpValidatorのインスタンスを作成します。
このメソッドをオーバーライドして、バリデーターを調整したり、異なるマッチング戦略を実装したりできます。
protected yii\validators\IpValidator getIpValidator ( ) |
protected function getIpValidator()
{
return new IpValidator();
}
これがAJAX(XMLHttpRequest)リクエストかどうかを返します。
クロスドメインリクエストの場合、ブラウザはデフォルトでX-Requested-Withヘッダーを設定しません。https://stackoverflow.com/questions/8163703/cross-domain-ajax-doesnt-send-x-requested-with-header
fetch()
を使用している場合は、ヘッダーを手動で渡してください。
fetch(url, {
method: 'GET',
headers: {'X-Requested-With': 'XMLHttpRequest'}
})
public boolean getIsAjax ( ) | ||
戻り値 | boolean |
これがAJAX(XMLHttpRequest)リクエストかどうか。 |
---|
public function getIsAjax()
{
return $this->headers->get('X-Requested-With') === 'XMLHttpRequest';
}
定義済み: yii\base\Request::getIsConsoleRequest()
現在のリクエストがコマンドラインを介して行われたかどうかを示す値を返します。
public boolean getIsConsoleRequest ( ) | ||
戻り値 | boolean |
現在のリクエストがコンソール経由で行われたかどうかを示す値 |
---|
public function getIsConsoleRequest()
{
return $this->_isConsoleRequest !== null ? $this->_isConsoleRequest : PHP_SAPI === 'cli';
}
これがDELETEリクエストかどうかを返します。
public boolean getIsDelete ( ) | ||
戻り値 | boolean |
これがDELETEリクエストかどうか。 |
---|
public function getIsDelete()
{
return $this->getMethod() === 'DELETE';
}
これがAdobe FlashまたはFlexリクエストかどうかを返します。
public boolean getIsFlash ( ) | ||
戻り値 | boolean |
これがAdobe FlashまたはAdobe Flexリクエストかどうか。 |
---|
public function getIsFlash()
{
$userAgent = $this->headers->get('User-Agent', '');
return stripos($userAgent, 'Shockwave') !== false
|| stripos($userAgent, 'Flash') !== false;
}
これがGETリクエストかどうかを返します。
public boolean getIsGet ( ) | ||
戻り値 | boolean |
これがGETリクエストかどうか。 |
---|
public function getIsGet()
{
return $this->getMethod() === 'GET';
}
これがHEADリクエストかどうかを返します。
public boolean getIsHead ( ) | ||
戻り値 | boolean |
これがHEADリクエストかどうか。 |
---|
public function getIsHead()
{
return $this->getMethod() === 'HEAD';
}
これがOPTIONSリクエストかどうかを返します。
public boolean getIsOptions ( ) | ||
戻り値 | boolean |
これがOPTIONSリクエストかどうか。 |
---|
public function getIsOptions()
{
return $this->getMethod() === 'OPTIONS';
}
これがPATCHリクエストかどうかを返します。
public boolean getIsPatch ( ) | ||
戻り値 | boolean |
これがPATCHリクエストかどうか。 |
---|
public function getIsPatch()
{
return $this->getMethod() === 'PATCH';
}
これがPJAXリクエストかどうかを返します。
public boolean getIsPjax ( ) | ||
戻り値 | boolean |
これがPJAXリクエストかどうか |
---|
public function getIsPjax()
{
return $this->getIsAjax() && $this->headers->has('X-Pjax');
}
これがPOSTリクエストかどうかを返します。
public boolean getIsPost ( ) | ||
戻り値 | boolean |
これがPOSTリクエストかどうか。 |
---|
public function getIsPost()
{
return $this->getMethod() === 'POST';
}
これがPUTリクエストかどうかを返します。
public boolean getIsPut ( ) | ||
戻り値 | boolean |
これがPUTリクエストかどうか。 |
---|
public function getIsPut()
{
return $this->getMethod() === 'PUT';
}
リクエストがセキュアチャネル(https)を介して送信されたかどうかを返します。
public boolean getIsSecureConnection ( ) | ||
戻り値 | boolean |
リクエストがセキュアチャネル(https)経由で送信された場合 |
---|
public function getIsSecureConnection()
{
if (isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'], 'on') === 0 || $_SERVER['HTTPS'] == 1)) {
return true;
}
if (($proto = $this->getSecureForwardedHeaderTrustedPart('proto')) !== null) {
return strcasecmp($proto, 'https') === 0;
}
foreach ($this->secureProtocolHeaders as $header => $values) {
if (($headerValue = $this->headers->get($header, null)) !== null) {
foreach ($values as $value) {
if (strcasecmp($headerValue, $value) === 0) {
return true;
}
}
}
}
return false;
}
現在のリクエストのメソッド(例:GET、POST、HEAD、PUT、PATCH、DELETE)を返します。
public string getMethod ( ) | ||
戻り値 | string |
リクエストメソッド(例:GET、POST、HEAD、PUT、PATCH、DELETE)。返される値は大文字に変換されます。 |
---|
public function getMethod()
{
if (
isset($_POST[$this->methodParam])
// Never allow to downgrade request from WRITE methods (POST, PATCH, DELETE, etc)
// to read methods (GET, HEAD, OPTIONS) for security reasons.
&& !in_array(strtoupper($_POST[$this->methodParam]), ['GET', 'HEAD', 'OPTIONS'], true)
) {
return strtoupper($_POST[$this->methodParam]);
}
if ($this->headers->has('X-Http-Method-Override')) {
return strtoupper($this->headers->get('X-Http-Method-Override'));
}
if (isset($_SERVER['REQUEST_METHOD'])) {
return strtoupper($_SERVER['REQUEST_METHOD']);
}
return 'GET';
}
CORSリクエストのURLオリジンを返します。
戻り値は、ブラウザから送信されたOrigin
ヘッダーから取得されます。
originリクエストヘッダーは、フェッチの発生元を示します。パス情報は含まれず、サーバー名のみが含まれます。CORSリクエストやPOSTリクエストでも送信されます。refererヘッダーに似ていますが、refererヘッダーとは異なり、完全なパスは公開しません。詳細については、https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Originを参照してください。
getHeaders()も参照してください。
public string|null getOrigin ( ) | ||
戻り値 | string|null |
CORSリクエストのURLオリジン、利用できない場合は |
---|
public function getOrigin()
{
return $this->getHeaders()->get('origin');
}
現在要求されているURLのパス情報を返します。
パス情報は、エントリスクリプトの後、疑問符(クエリ文字列)の前にある部分です。先頭と末尾のスラッシュは両方削除されます。
public string getPathInfo ( ) | ||
戻り値 | string |
エントリスクリプトの後、疑問符の前にあるリクエストURLの一部。返されるパス情報は既にURLデコードされています。 |
---|---|---|
例外 | yii\base\InvalidConfigException |
予期しないサーバー設定によりパス情報が判別できない場合 |
public function getPathInfo()
{
if ($this->_pathInfo === null) {
$this->_pathInfo = $this->resolvePathInfo();
}
return $this->_pathInfo;
}
public integer getPort ( ) | ||
戻り値 | integer |
安全でないリクエストのポート番号。 |
---|
public function getPort()
{
if ($this->_port === null) {
$serverPort = $this->getServerPort();
$this->_port = !$this->getIsSecureConnection() && $serverPort !== null ? $serverPort : 80;
}
return $this->_port;
}
このアプリケーションで使用するべきユーザーが優先する言語を返します。
言語解決は、ユーザーが優先する言語とアプリケーションでサポートされている言語に基づいています。このメソッドは最適な一致を見つけようとします。
public string getPreferredLanguage ( array $languages = [] ) | ||
$languages | array |
アプリケーションでサポートされている言語のリスト。これが空の場合、現在のアプリケーション言語がそれ以上の処理なしで返されます。 |
戻り値 | string |
アプリケーションが使用する言語。 |
---|
public function getPreferredLanguage(array $languages = [])
{
if (empty($languages)) {
return Yii::$app->language;
}
foreach ($this->getAcceptableLanguages() as $acceptableLanguage) {
$acceptableLanguage = str_replace('_', '-', strtolower($acceptableLanguage));
foreach ($languages as $language) {
$normalizedLanguage = str_replace('_', '-', strtolower($language));
if (
$normalizedLanguage === $acceptableLanguage // en-us==en-us
|| strpos($acceptableLanguage, $normalizedLanguage . '-') === 0 // en==en-us
|| strpos($normalizedLanguage, $acceptableLanguage . '-') === 0 // en-us==en
) {
return $language;
}
}
}
return reset($languages);
}
public mixed getQueryParam ( $name, $defaultValue = null ) | ||
$name | string |
GETパラメータ名。 |
$defaultValue | mixed |
GETパラメータが存在しない場合のデフォルトのパラメータ値。 |
戻り値 | mixed |
GETパラメータ値。 |
---|
public function getQueryParam($name, $defaultValue = null)
{
$params = $this->getQueryParams();
return isset($params[$name]) ? $params[$name] : $defaultValue;
}
$queryStringで指定されたリクエストパラメータを返します。
パラメータが明示的に設定されていない場合、このメソッドは$_GET
の内容を返します。
setQueryParams()も参照してください。
public array getQueryParams ( ) | ||
戻り値 | array |
リクエストGETパラメータの値。 |
---|
public function getQueryParams()
{
if ($this->_queryParams === null) {
return $_GET;
}
return $this->_queryParams;
}
クエスチョンマークの後のリクエストURLの部分を返します。
public string getQueryString ( ) | ||
戻り値 | string |
リクエストURLの疑問符の後の部分。 |
---|
public function getQueryString()
{
return isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
}
生のHTTPリクエストボディを返します。
public string getRawBody ( ) | ||
戻り値 | string |
リクエストボディ。 |
---|
public function getRawBody()
{
if ($this->_rawBody === null) {
$this->_rawBody = file_get_contents('php://input');
}
return $this->_rawBody;
}
URLリファラーを返します。
public string|null getReferrer ( ) | ||
戻り値 | string|null |
URLリファラー。利用できない場合はnull。 |
---|
public function getReferrer()
{
return $this->headers->get('Referer');
}
public string|null getRemoteHost ( ) | ||
戻り値 | string|null |
リモートホスト名。利用できない場合は |
---|
public function getRemoteHost()
{
return isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : null;
}
この接続の反対側のIPを返します。
これは常に次のホップであり、ヘッダーは無視されます。
public string|null getRemoteIP ( ) | ||
戻り値 | string|null |
リモートIPアドレス、利用できない場合は |
---|
public function getRemoteIP()
{
return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
}
エントリスクリプトファイルパスを返します。
デフォルトの実装では、単純に$_SERVER['SCRIPT_FILENAME']
を返します。
public string getScriptFile ( ) | ||
戻り値 | string |
エントリスクリプトファイルのパス |
---|---|---|
例外 | yii\base\InvalidConfigException |
public function getScriptFile()
{
if (isset($this->_scriptFile)) {
return $this->_scriptFile;
}
if (isset($_SERVER['SCRIPT_FILENAME'])) {
return $_SERVER['SCRIPT_FILENAME'];
}
throw new InvalidConfigException('Unable to determine the entry script file path.');
}
エントリスクリプトの相対URLを返します。
このメソッドの実装は、Zend FrameworkのZend_Controller_Request_Httpを参照しています。
public string getScriptUrl ( ) | ||
戻り値 | string |
エントリスクリプトの相対URL。 |
---|---|---|
例外 | yii\base\InvalidConfigException |
エントリスクリプトURLを判別できない場合 |
public function getScriptUrl()
{
if ($this->_scriptUrl === null) {
$scriptFile = $this->getScriptFile();
$scriptName = basename($scriptFile);
if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $scriptName) {
$this->_scriptUrl = $_SERVER['SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $scriptName) {
$this->_scriptUrl = $_SERVER['PHP_SELF'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $scriptName) {
$this->_scriptUrl = $_SERVER['ORIG_SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && ($pos = strpos($_SERVER['PHP_SELF'], '/' . $scriptName)) !== false) {
$this->_scriptUrl = substr($_SERVER['SCRIPT_NAME'], 0, $pos) . '/' . $scriptName;
} elseif (!empty($_SERVER['DOCUMENT_ROOT']) && strpos($scriptFile, $_SERVER['DOCUMENT_ROOT']) === 0) {
$this->_scriptUrl = str_replace([$_SERVER['DOCUMENT_ROOT'], '\\'], ['', '/'], $scriptFile);
} else {
throw new InvalidConfigException('Unable to determine the entry script URL.');
}
}
return $this->_scriptUrl;
}
デコードされた転送ヘッダーを返します。
protected array getSecureForwardedHeaderParts ( ) |
protected function getSecureForwardedHeaderParts()
{
if ($this->_secureForwardedHeaderParts !== null) {
return $this->_secureForwardedHeaderParts;
}
if (count(preg_grep('/^forwarded$/i', $this->secureHeaders)) === 0) {
return $this->_secureForwardedHeaderParts = [];
}
/*
* First header is always correct, because proxy CAN add headers
* after last one is found.
* Keep in mind that it is NOT enforced, therefore we cannot be
* sure, that this is really a first one.
*
* FPM keeps last header sent which is a bug. You need to merge
* headers together on your web server before letting FPM handle it
* @see https://bugs.php.net/bug.php?id=78844
*/
$forwarded = $this->headers->get('Forwarded', '');
if ($forwarded === '') {
return $this->_secureForwardedHeaderParts = [];
}
preg_match_all('/(?:[^",]++|"[^"]++")+/', $forwarded, $forwardedElements);
foreach ($forwardedElements[0] as $forwardedPairs) {
preg_match_all('/(?P<key>\w+)\s*=\s*(?:(?P<value>[^",;]*[^",;\s])|"(?P<value2>[^"]+)")/', $forwardedPairs, $matches, PREG_SET_ORDER);
$this->_secureForwardedHeaderParts[] = array_reduce($matches, function ($carry, $item) {
$value = $item['value'];
if (isset($item['value2']) && $item['value2'] !== '') {
$value = $item['value2'];
}
$carry[strtolower($item['key'])] = $value;
return $carry;
}, []);
}
return $this->_secureForwardedHeaderParts;
}
トークンの最初のForwarded
ヘッダー値を取得します。
protected string|null getSecureForwardedHeaderTrustedPart ( $token ) | ||
$token | string |
ヘッダートークン |
protected function getSecureForwardedHeaderTrustedPart($token)
{
$token = strtolower($token);
if ($parts = $this->getSecureForwardedHeaderTrustedParts()) {
$lastElement = array_pop($parts);
if ($lastElement && isset($lastElement[$token])) {
return $lastElement[$token];
}
}
return null;
}
信頼できるForwarded
ヘッダー部分のみを取得します。
protected array getSecureForwardedHeaderTrustedParts ( ) |
protected function getSecureForwardedHeaderTrustedParts()
{
if ($this->_secureForwardedHeaderTrustedParts !== null) {
return $this->_secureForwardedHeaderTrustedParts;
}
$validator = $this->getIpValidator();
$trustedHosts = [];
foreach ($this->trustedHosts as $trustedCidr => $trustedCidrOrHeaders) {
if (!is_array($trustedCidrOrHeaders)) {
$trustedCidr = $trustedCidrOrHeaders;
}
$trustedHosts[] = $trustedCidr;
}
$validator->setRanges($trustedHosts);
$this->_secureForwardedHeaderTrustedParts = array_filter(
$this->getSecureForwardedHeaderParts(),
function ($headerPart) use ($validator) {
return isset($headerPart['for']) ? !$validator->validate($headerPart['for']) : true;
}
);
return $this->_secureForwardedHeaderTrustedParts;
}
public integer getSecurePort ( ) | ||
戻り値 | integer |
セキュアリクエストのポート番号。 |
---|
public function getSecurePort()
{
if ($this->_securePort === null) {
$serverPort = $this->getServerPort();
$this->_securePort = $this->getIsSecureConnection() && $serverPort !== null ? $serverPort : 443;
}
return $this->_securePort;
}
サーバー名を返します。
public string|null getServerName ( ) | ||
戻り値 | string|null |
サーバー名。利用できない場合はnull。 |
---|
public function getServerName()
{
return isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : null;
}
サーバーポート番号を返します。フォワーディングヘッダー(例:「X-Forwarded-Port」)を介してポートが指定され、リモートホストが「信頼できるホスト」である場合、そのポートが使用されます($portHeadersを参照)。そうでない場合は、デフォルトのサーバーポートが返されます。
$portHeadersも参照してください。
public integer|null getServerPort ( ) | ||
戻り値 | integer|null |
サーバーポート番号。利用できない場合はnull。 |
---|
public function getServerPort()
{
foreach ($this->portHeaders as $portHeader) {
if ($this->headers->has($portHeader)) {
$port = $this->headers->get($portHeader);
if ($port !== null) {
return $port;
}
}
}
return isset($_SERVER['SERVER_PORT']) ? (int) $_SERVER['SERVER_PORT'] : null;
}
$trustedHostsに従って信頼できるヘッダー。
protected array getTrustedHeaders ( ) |
protected function getTrustedHeaders()
{
// do not trust any of the [[secureHeaders]] by default
$trustedHeaders = [];
// check if the client is a trusted host
if (!empty($this->trustedHosts)) {
$validator = $this->getIpValidator();
$ip = $this->getRemoteIP();
foreach ($this->trustedHosts as $cidr => $headers) {
if (!is_array($headers)) {
$cidr = $headers;
$headers = $this->secureHeaders;
}
$validator->setRanges($cidr);
if ($validator->validate($ip)) {
$trustedHeaders = $headers;
break;
}
}
}
return $trustedHeaders;
}
現在要求されている相対URLを返します。
これは、$hostInfo部分以降のURLの部分を指します。$queryString部分がある場合は、それも含まれます。
public string getUrl ( ) | ||
戻り値 | string |
現在要求されている相対URLです。返されるURIは、クライアントに応じてURLエンコードされている場合があります。 |
---|---|---|
例外 | yii\base\InvalidConfigException |
サーバーの設定が通常と異なるためにURLを決定できない場合 |
public function getUrl()
{
if ($this->_url === null) {
$this->_url = $this->resolveRequestUri();
}
return $this->_url;
}
ユーザーエージェントを返します。
public string|null getUserAgent ( ) | ||
戻り値 | string|null |
ユーザーエージェント。利用できない場合はnull。 |
---|
public function getUserAgent()
{
return $this->headers->get('User-Agent');
}
ユーザーホスト名を返します。
HOSTは、ヘッダーと/または$_SERVER
変数を使用して決定されます。
public string|null getUserHost ( ) | ||
戻り値 | string|null |
ユーザーホスト名。利用できない場合はnull。 |
---|
public function getUserHost()
{
$userIp = $this->getUserIpFromIpHeaders();
if ($userIp === null) {
return $this->getRemoteHost();
}
return gethostbyaddr($userIp);
}
ユーザーIPアドレスを返します。
IPアドレスは、ヘッダーと/または$_SERVER
変数を使用して決定されます。
public string|null getUserIP ( ) | ||
戻り値 | string|null |
ユーザーのIPアドレス。利用できない場合はnull。 |
---|
public function getUserIP()
{
if ($this->_ip === null) {
$this->_ip = $this->getUserIpFromIpHeaders();
if ($this->_ip === null) {
$this->_ip = $this->getRemoteIP();
}
}
return $this->_ip;
}
protected string|null getUserIpFromIpHeader ( $ips ) | ||
$ips | string |
コンマ区切りのIPリスト |
戻り値 | string|null |
IPアドレス(文字列)。ヘッダーからIPアドレスを特定できない場合は、Nullを返します。 |
---|
protected function getUserIpFromIpHeader($ips)
{
$ips = trim($ips);
if ($ips === '') {
return null;
}
$ips = preg_split('/\s*,\s*/', $ips, -1, PREG_SPLIT_NO_EMPTY);
krsort($ips);
$validator = $this->getIpValidator();
$resultIp = null;
foreach ($ips as $ip) {
$validator->setRanges('any');
if (!$validator->validate($ip) /* checking IP format */) {
break;
}
$resultIp = $ip;
$isTrusted = false;
foreach ($this->trustedHosts as $trustedCidr => $trustedCidrOrHeaders) {
if (!is_array($trustedCidrOrHeaders)) {
$trustedCidr = $trustedCidrOrHeaders;
}
$validator->setRanges($trustedCidr);
if ($validator->validate($ip) /* checking trusted range */) {
$isTrusted = true;
break;
}
}
if (!$isTrusted) {
break;
}
}
return $resultIp;
}
$ipHeadersからユーザーIPアドレスを返します。
参照: $ipHeaders.
protected string|null getUserIpFromIpHeaders ( ) | ||
戻り値 | string|null |
ユーザーのIPアドレス。利用できない場合はnull。 |
---|
protected function getUserIpFromIpHeaders()
{
$ip = $this->getSecureForwardedHeaderTrustedPart('for');
if (
$ip !== null && preg_match(
'/^\[?(?P<ip>(?:(?:(?:[0-9a-f]{1,4}:){1,6}(?:[0-9a-f]{1,4})?(?:(?::[0-9a-f]{1,4}){1,6}))|(?:\d{1,3}\.){3}\d{1,3}))\]?(?::(?P<port>\d+))?$/',
$ip,
$matches
)
) {
$ip = $this->getUserIpFromIpHeader($matches['ip']);
if ($ip !== null) {
return $ip;
}
}
foreach ($this->ipHeaders as $ipHeader) {
if ($this->headers->has($ipHeader)) {
$ip = $this->getUserIpFromIpHeader($this->headers->get($ipHeader));
if ($ip !== null) {
return $ip;
}
}
}
return null;
}
定義済み: yii\base\Component::hasEventHandlers()
指定されたイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。
public boolean hasEventHandlers ( $name ) | ||
$name | string |
イベント名 |
戻り値 | boolean |
イベントにハンドラーがアタッチされているかどうか。 |
---|
public function hasEventHandlers($name)
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return Event::hasHandlers($this, $name);
}
定義済み: yii\base\Component::hasMethod()
メソッドが定義されているかどうかを示す値を返します。
メソッドが定義されている場合
- クラスが指定された名前のメソッドを持っている場合
- アタッチされたビヘイビアが指定された名前のメソッドを持っている場合(
$checkBehaviors
がtrueの場合)。
public boolean hasMethod ( $name, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkBehaviors | boolean |
ビヘイビアのメソッドをこのコンポーネントのメソッドとして扱うかどうか |
戻り値 | boolean |
メソッドが定義されているかどうか |
---|
public function hasMethod($name, $checkBehaviors = true)
{
if (method_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->hasMethod($name)) {
return true;
}
}
}
return false;
}
定義済み: yii\base\Component::hasProperty()
このコンポーネントのプロパティが定義されているかどうかを示す値を返します。
プロパティが定義されている場合
- クラスが指定された名前と関連付けられたゲッターまたはセッターメソッドを持っている場合(この場合、プロパティ名はケースインセンシティブです)。
- クラスに、指定された名前のメンバ変数がある場合(`$checkVars`がtrueの場合)。
- アタッチされたビヘイビアが指定された名前のプロパティを持っている場合(
$checkBehaviors
がtrueの場合)。
参照
public boolean hasProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバ変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
戻り値 | boolean |
プロパティが定義されているかどうか |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
定義済み: yii\base\BaseObject::init()
オブジェクトを初期化します。
このメソッドは、オブジェクトが指定された設定で初期化された後、コンストラクターの最後に呼び出されます。
public void init ( ) |
public function init()
{
}
$_COOKIE
をyii\web\Cookieの配列に変換します。
protected array loadCookies ( ) | ||
戻り値 | array |
リクエストから取得したクッキー |
---|---|---|
例外 | yii\base\InvalidConfigException |
$cookieValidationKey が設定されていない場合、$enableCookieValidation がtrueの場合 |
protected function loadCookies()
{
$cookies = [];
if ($this->enableCookieValidation) {
if ($this->cookieValidationKey == '') {
throw new InvalidConfigException(get_class($this) . '::cookieValidationKey must be configured with a secret key.');
}
foreach ($_COOKIE as $name => $value) {
if (!is_string($value)) {
continue;
}
$data = Yii::$app->getSecurity()->validateData($value, $this->cookieValidationKey);
if ($data === false) {
continue;
}
if (defined('PHP_VERSION_ID') && PHP_VERSION_ID >= 70000) {
$data = @unserialize($data, ['allowed_classes' => false]);
} else {
$data = @unserialize($data);
}
if (is_array($data) && isset($data[0], $data[1]) && $data[0] === $name) {
$cookies[$name] = Yii::createObject([
'class' => 'yii\web\Cookie',
'name' => $name,
'value' => $data[1],
'expire' => null,
]);
}
}
} else {
foreach ($_COOKIE as $name => $value) {
$cookies[$name] = Yii::createObject([
'class' => 'yii\web\Cookie',
'name' => $name,
'value' => $value,
'expire' => null,
]);
}
}
return $cookies;
}
CookieまたはセッションからCSRFトークンを読み込みます。
protected string|null loadCsrfToken ( ) | ||
戻り値 | string|null |
クッキーまたはセッションからロードされたCSRFトークン。クッキーまたはセッションにCSRFトークンがない場合はNullを返します。 |
---|
protected function loadCsrfToken()
{
if ($this->enableCsrfCookie) {
return $this->getCookies()->getValue($this->csrfParam);
}
return Yii::$app->getSession()->get($this->csrfParam);
}
定義済み: yii\base\Component::off()
このコンポーネントから既存のイベントハンドラーをデタッチします。
このメソッドは、on() の反対です。
注:イベント名にワイルドカードパターンが渡された場合、このワイルドカードで登録されたハンドラーのみが削除され、このワイルドカードと一致するプレーン名で登録されたハンドラーは残ります。
参照: on().
public boolean off ( $name, $handler = null ) | ||
$name | string |
イベント名 |
$handler | callable|null |
削除するイベントハンドラー。Nullの場合は、指定されたイベントにアタッチされているすべてのハンドラーが削除されます。 |
戻り値 | boolean |
ハンドラーが見つかり、デタッチされた場合 |
---|
public function off($name, $handler = null)
{
$this->ensureBehaviors();
if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
return false;
}
if ($handler === null) {
unset($this->_events[$name], $this->_eventWildcards[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->_events[$name])) {
foreach ($this->_events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_events[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_events[$name] = array_values($this->_events[$name]);
return true;
}
}
// wildcard event names
if (isset($this->_eventWildcards[$name])) {
foreach ($this->_eventWildcards[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_eventWildcards[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
// remove empty wildcards to save future redundant regex checks:
if (empty($this->_eventWildcards[$name])) {
unset($this->_eventWildcards[$name]);
}
}
}
return $removed;
}
定義済み: yii\base\Component::on()
イベントにイベントハンドラーをアタッチします。
イベントハンドラーは有効なPHPコールバックである必要があります。いくつかの例を以下に示します。
function ($event) { ... } // anonymous function
[$object, 'handleClick'] // $object->handleClick()
['Page', 'handleClick'] // Page::handleClick()
'handleClick' // global function handleClick()
イベントハンドラーは、以下のシグネチャで定義する必要があります。
function ($event)
ここで、$event
は、イベントに関連付けられたパラメーターを含むyii\base\Eventオブジェクトです。
2.0.14以降、イベント名をワイルドカードパターンとして指定できます。
$component->on('event.group.*', function ($event) {
Yii::trace($event->name . ' is triggered.');
});
参照: off().
public void on ( $name, $handler, $data = null, $append = true ) | ||
$name | string |
イベント名 |
$handler | callable |
イベントハンドラー |
$data | mixed |
イベントが発生したときにイベントハンドラーに渡されるデータ。イベントハンドラーが呼び出されると、このデータはyii\base\Event::$dataからアクセスできます。 |
$append | boolean |
既存のハンドラーリストの最後に新しいイベントハンドラーを追加するかどうか。falseの場合、新しいハンドラーは既存のハンドラーリストの先頭に挿入されます。 |
public function on($name, $handler, $data = null, $append = true)
{
$this->ensureBehaviors();
if (strpos($name, '*') !== false) {
if ($append || empty($this->_eventWildcards[$name])) {
$this->_eventWildcards[$name][] = [$handler, $data];
} else {
array_unshift($this->_eventWildcards[$name], [$handler, $data]);
}
return;
}
if ($append || empty($this->_events[$name])) {
$this->_events[$name][] = [$handler, $data];
} else {
array_unshift($this->_events[$name], [$handler, $data]);
}
}
指定されたAccept
(またはAccept-Language
)ヘッダーを解析します。
このメソッドは、指定された`Accept`ヘッダーで指定された品質スコアと対応するパラメーターを含む許容値を返します。戻り値の配列キーは許容値で、配列値は対応する品質スコアとパラメーターで構成されます。品質スコアが最も高い許容値が最初に返されます。例えば、
$header = 'text/plain; q=0.5, application/json; version=1.0, application/xml; version=2.0;';
$accepts = $request->parseAcceptHeader($header);
print_r($accepts);
// displays:
// [
// 'application/json' => ['q' => 1, 'version' => '1.0'],
// 'application/xml' => ['q' => 1, 'version' => '2.0'],
// 'text/plain' => ['q' => 0.5],
// ]
public array parseAcceptHeader ( $header ) | ||
$header | string |
解析するヘッダー |
戻り値 | array |
品質スコアでソートされた許容値。スコアの高い値が最初に返されます。 |
---|
public function parseAcceptHeader($header)
{
$accepts = [];
foreach (explode(',', $header) as $i => $part) {
$params = preg_split('/\s*;\s*/', trim($part), -1, PREG_SPLIT_NO_EMPTY);
if (empty($params)) {
continue;
}
$values = [
'q' => [$i, array_shift($params), 1],
];
foreach ($params as $param) {
if (strpos($param, '=') !== false) {
list($key, $value) = explode('=', $param, 2);
if ($key === 'q') {
$values['q'][2] = (float) $value;
} else {
$values[$key] = $value;
}
} else {
$values[] = $param;
}
}
$accepts[] = $values;
}
usort($accepts, function ($a, $b) {
$a = $a['q']; // index, name, q
$b = $b['q'];
if ($a[2] > $b[2]) {
return -1;
}
if ($a[2] < $b[2]) {
return 1;
}
if ($a[1] === $b[1]) {
return $a[0] > $b[0] ? 1 : -1;
}
if ($a[1] === '*/*') {
return 1;
}
if ($b[1] === '*/*') {
return -1;
}
$wa = $a[1][strlen($a[1]) - 1] === '*';
$wb = $b[1][strlen($b[1]) - 1] === '*';
if ($wa xor $wb) {
return $wa ? 1 : -1;
}
return $a[0] > $b[0] ? 1 : -1;
});
$result = [];
foreach ($accepts as $accept) {
$name = $accept['q'][1];
$accept['q'] = $accept['q'][2];
$result[$name] = $accept;
}
return $result;
}
指定された名前のPOSTパラメータを返します。名前が指定されていない場合は、すべてのPOSTパラメータの配列を返します。
public array|mixed post ( $name = null, $defaultValue = null ) | ||
$name | string |
パラメータ名 |
$defaultValue | mixed |
パラメータが存在しない場合のデフォルトのパラメータ値。 |
public function post($name = null, $defaultValue = null)
{
if ($name === null) {
return $this->getBodyParams();
}
return $this->getBodyParam($name, $defaultValue);
}
現在のリクエストをルートと関連パラメータに解決します。
public array resolve ( ) | ||
戻り値 | array |
最初の要素はルート、2番目の要素は関連するパラメータです。 |
---|---|---|
例外 | yii\web\NotFoundHttpException |
リクエストを解決できない場合。 |
public function resolve()
{
$result = Yii::$app->getUrlManager()->parseRequest($this);
if ($result !== false) {
list($route, $params) = $result;
if ($this->_queryParams === null) {
$_GET = $params + $_GET; // preserve numeric keys
} else {
$this->_queryParams = $params + $this->_queryParams;
}
return [$route, $this->getQueryParams()];
}
throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'));
}
現在要求されているURLのパス情報部分を解決します。
パス情報は、エントリスクリプトの後、疑問符(クエリ文字列)の前にある部分です。先頭のスラッシュは両方削除されます(末尾のスラッシュは保持されます)。
protected string resolvePathInfo ( ) | ||
戻り値 | string |
エントリスクリプトの後、疑問符の前にあるリクエストURLの一部。返されるパス情報はデコードされていることに注意してください。 |
---|---|---|
例外 | yii\base\InvalidConfigException |
予期しないサーバー設定によりパス情報が判別できない場合 |
protected function resolvePathInfo()
{
$pathInfo = $this->getUrl();
if (($pos = strpos($pathInfo, '?')) !== false) {
$pathInfo = substr($pathInfo, 0, $pos);
}
$pathInfo = urldecode($pathInfo);
// try to encode in UTF8 if not so
// https://www.w3.org/International/questions/qa-forms-utf-8.en.html
if (
!preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $pathInfo)
) {
$pathInfo = $this->utf8Encode($pathInfo);
}
$scriptUrl = $this->getScriptUrl();
$baseUrl = $this->getBaseUrl();
if (strpos($pathInfo, $scriptUrl) === 0) {
$pathInfo = substr($pathInfo, strlen($scriptUrl));
} elseif ($baseUrl === '' || strpos($pathInfo, $baseUrl) === 0) {
$pathInfo = substr($pathInfo, strlen($baseUrl));
} elseif (isset($_SERVER['PHP_SELF']) && strpos($_SERVER['PHP_SELF'], $scriptUrl) === 0) {
$pathInfo = substr($_SERVER['PHP_SELF'], strlen($scriptUrl));
} else {
throw new InvalidConfigException('Unable to determine the path info of the current request.');
}
if (strncmp($pathInfo, '/', 1) === 0) {
$pathInfo = substr($pathInfo, 1);
}
return (string) $pathInfo;
}
現在要求されているURLのリクエストURI部分を解決します。
これは$hostInfo部分の後の部分です。$queryString部分が存在する場合はそれも含まれます。このメソッドの実装は、Zend FrameworkのZend_Controller_Request_Httpを参照しています。
protected string|boolean resolveRequestUri ( ) | ||
戻り値 | string|boolean |
現在リクエストされているURLのリクエストURI部分。返されるURIは、クライアントによってURLエンコードされている場合があります。 |
---|---|---|
例外 | yii\base\InvalidConfigException |
異常なサーバー構成によりリクエストURIを決定できない場合 |
protected function resolveRequestUri()
{
if ($this->headers->has('X-Rewrite-Url')) { // IIS
$requestUri = $this->headers->get('X-Rewrite-Url');
} elseif (isset($_SERVER['REQUEST_URI'])) {
$requestUri = $_SERVER['REQUEST_URI'];
if ($requestUri !== '' && $requestUri[0] !== '/') {
$requestUri = preg_replace('/^(http|https):\/\/[^\/]+/i', '', $requestUri);
}
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0 CGI
$requestUri = $_SERVER['ORIG_PATH_INFO'];
if (!empty($_SERVER['QUERY_STRING'])) {
$requestUri .= '?' . $_SERVER['QUERY_STRING'];
}
} else {
throw new InvalidConfigException('Unable to determine the request URI.');
}
return $requestUri;
}
public void setAcceptableContentTypes ( $value ) | ||
$value | array |
エンドユーザーが許容するコンテンツタイプ。優先順位に従って並べられています。 |
public function setAcceptableContentTypes($value)
{
$this->_contentTypes = $value;
}
public void setAcceptableLanguages ( $value ) | ||
$value | array |
エンドユーザーが許容する言語。優先順位に従って並べられています。 |
public function setAcceptableLanguages($value)
{
$this->_languages = $value;
}
アプリケーションの相対URLを設定します。
デフォルトでは、URLはエントリスクリプトのURLに基づいて決定されます。このセッターは、この動作を変更したい場合に提供されます。
public void setBaseUrl ( $value ) | ||
$value | string |
アプリケーションの相対URL |
public function setBaseUrl($value)
{
$this->_baseUrl = $value;
}
リクエストボディパラメータを設定します。
getBodyParams()も参照してください。
public void setBodyParams ( $values ) | ||
$values | array|object |
リクエストボディパラメータ(名前と値のペア) |
public function setBodyParams($values)
{
$this->_bodyParams = $values;
}
アプリケーションURLのスキーマとホスト部分を設定します。
このセッターは、特定のWebサーバーでスキーマとホスト名を確認できない場合に提供されます。
このプロパティに関するセキュリティに関するメモについては、getHostInfo()も参照してください。
public void setHostInfo ( $value ) | ||
$value | string|null |
アプリケーションURLのスキーマとホスト部分。末尾のスラッシュは削除されます。 |
public function setHostInfo($value)
{
$this->_hostName = null;
$this->_hostInfo = $value === null ? null : rtrim($value, '/');
}
定義先: yii\base\Request::setIsConsoleRequest()
現在のリクエストがコマンドラインを介して行われたかどうかを示す値を設定します。
public void setIsConsoleRequest ( $value ) | ||
$value | boolean |
現在のリクエストがコマンドラインを介して行われたかどうかを示す値。 |
public function setIsConsoleRequest($value)
{
$this->_isConsoleRequest = $value;
}
現在のリクエストのパス情報を設定します。
このメソッドは主にテスト目的で提供されています。
public void setPathInfo ( $value ) | ||
$value | string |
現在のリクエストのパス情報。 |
public function setPathInfo($value)
{
$this->_pathInfo = $value === null ? null : ltrim($value, '/');
}
安全でないリクエストに使用するポートを設定します。
このセッターは、特定のサーバー構成でカスタムポートが必要な場合に提供されます。
public void setPort ( $value ) | ||
$value | integer |
ポート番号。 |
public function setPort($value)
{
if ($value != $this->_port) {
$this->_port = (int) $value;
$this->_hostInfo = null;
}
}
public void setQueryParams ( $values ) | ||
$values | array |
リクエストクエリパラメータ(名前と値のペア) |
public function setQueryParams($values)
{
$this->_queryParams = $values;
}
生のHTTPリクエストボディを設定します。このメソッドは主に、生のHTTPリクエストをシミュレートするテストスクリプトで使用されます。
public void setRawBody ( $rawBody ) | ||
$rawBody | string |
リクエストボディ。 |
public function setRawBody($rawBody)
{
$this->_rawBody = $rawBody;
}
エントリスクリプトファイルパスを設定します。
エントリスクリプトファイルパスは通常、`$_SERVER['SCRIPT_FILENAME']`から取得できます。サーバー構成が正しい値を返さない場合は、このプロパティを構成して修正できます。
public void setScriptFile ( $value ) | ||
$value | string |
エントリスクリプトファイルパス。 |
public function setScriptFile($value)
{
$this->_scriptFile = $value;
}
アプリケーションエントリスクリプトの相対URLを設定します。
このセッターは、特定のWebサーバーでエントリスクリプトURLを判別できない場合に提供されます。
public void setScriptUrl ( $value ) | ||
$value | string |
アプリケーションエントリスクリプトの相対URL。 |
public function setScriptUrl($value)
{
$this->_scriptUrl = $value === null ? null : '/' . trim($value, '/');
}
セキュアリクエストに使用するポートを設定します。
このセッターは、特定のサーバー構成でカスタムポートが必要な場合に提供されます。
public void setSecurePort ( $value ) | ||
$value | integer |
ポート番号。 |
public function setSecurePort($value)
{
if ($value != $this->_securePort) {
$this->_securePort = (int) $value;
$this->_hostInfo = null;
}
}
現在要求されている相対URLを設定します。
URIは、$hostInfoの後の部分を参照する必要があります。URIはURLエンコードされている必要があることに注意してください。
public void setUrl ( $value ) | ||
$value | string |
設定するリクエストURI。 |
public function setUrl($value)
{
$this->_url = $value;
}
定義先: yii\base\Component::trigger()
イベントをトリガーします。
このメソッドは、イベントの発生を表します。クラスレベルのハンドラを含む、イベントにアタッチされたすべてのハンドラを呼び出します。
public void trigger ( $name, yii\base\Event $event = null ) | ||
$name | string |
イベント名 |
$event | yii\base\Event|null |
イベントインスタンス。設定されていない場合、デフォルトのyii\base\Eventオブジェクトが作成されます。 |
public function trigger($name, Event $event = null)
{
$this->ensureBehaviors();
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($eventHandlers as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) {
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);
}
CSRF検証を実行します。
このメソッドは、クッキーまたはセッションに保存されているトークンと比較することにより、ユーザーが提供したCSRFトークンを検証します。このメソッドは主にyii\web\Controller::beforeAction()で呼び出されます。
$enableCsrfValidationがfalseの場合、またはHTTPメソッドがGET、HEAD、OPTIONSのいずれかの場合、このメソッドはCSRF検証を実行しません。
public boolean validateCsrfToken ( $clientSuppliedToken = null ) | ||
$clientSuppliedToken | string|null |
検証するユーザーが提供したCSRFトークン。nullの場合、トークンは$csrfParam POSTフィールドまたはHTTPヘッダーから取得されます。このパラメータはバージョン2.0.4から利用可能です。 |
戻り値 | boolean |
CSRFトークンが有効かどうか。$enableCsrfValidationがfalseの場合、このメソッドはtrueを返します。 |
---|
public function validateCsrfToken($clientSuppliedToken = null)
{
$method = $this->getMethod();
// only validate CSRF token on non-"safe" methods https://tools.ietf.org/html/rfc2616#section-9.1.1
if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
return true;
}
$trueToken = $this->getCsrfToken();
if ($clientSuppliedToken !== null) {
return $this->validateCsrfTokenInternal($clientSuppliedToken, $trueToken);
}
return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
|| $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);
}
サインアップまたはログインしてコメントしてください。