クラス yii\web\UrlManager
継承 | yii\web\UrlManager » yii\base\Component » yii\base\BaseObject |
---|---|
実装 | yii\base\Configurable |
利用可能なバージョン | 2.0 |
ソースコード | https://github.com/yiisoft/yii2/blob/master/framework/web/UrlManager.php |
UrlManager は、一連のルールに基づいて HTTP リクエストの解析と URL の作成を処理します。
UrlManager は、デフォルトで yii\base\Application のアプリケーションコンポーネントとして構成されます。このインスタンスには、Yii::$app->urlManager
を介してアクセスできます。
アプリケーション構成の components
に配列を追加することで、その構成を変更できます。次の例を参照してください。
'urlManager' => [
'enablePrettyUrl' => true,
'rules' => [
// your rules go here
],
// ...
]
ルールは yii\web\UrlRuleInterface を実装するクラスであり、デフォルトでは yii\web\UrlRule です。ルールをネストするために、yii\web\GroupUrlRule クラスもあります。
UrlManager の詳細と使用方法については、ルーティングに関するガイド記事を参照してください。
公開プロパティ
公開メソッド
保護されたメソッド
メソッド | 説明 | 定義元 |
---|---|---|
buildRules() | 与えられたルール宣言から URL ルールオブジェクトを構築します。 | yii\web\UrlManager |
canBeCached() | ルールに対する createUrl() の結果を内部キャッシュにキャッシュすべきかどうかを示す値を返します。 | yii\web\UrlManager |
getBuiltRulesFromCache() | キャッシュから $ruleDeclarations に関連付けられた構築済みの URL ルールを提供します。 | yii\web\UrlManager |
getUrlFromCache() | 内部キャッシュに存在する場合、URL を取得します。 | yii\web\UrlManager |
setBuiltRulesCache() | キャッシュキーの一部として $rulesDeclaration を使用して、$builtRules をキャッシュに保存します。 | yii\web\UrlManager |
setRuleToCache() | ルール (例: yii\web\UrlRule) を内部キャッシュに保存します。 | yii\web\UrlManager |
プロパティの詳細
キャッシュオブジェクト、またはキャッシュオブジェクトのアプリケーションコンポーネント ID。アプリケーションコンポーネントを使用したくない場合に yii\caching\CacheInterface インスタンスを作成するために使用される配列でも構いません。コンパイルされた URL ルールは、利用可能な場合、このキャッシュオブジェクトを介してキャッシュされます。
UrlManager オブジェクトの作成後、このプロパティを変更する場合は、キャッシュオブジェクトのみを割り当てる必要があります。URL ルールをキャッシュしたくない場合は、このプロパティを false
または null
に設定します。
キャッシュエントリは、キャッシュ設定の $defaultDuration で設定された時間の間保存されます。これはデフォルトでは無制限です。$rules が頻繁に変更される場合は、この値を調整する必要があります。
キャッシュされたルールのキャッシュキー
きれいな URL を有効にするかどうか。すべてのパラメータを URL のクエリ文字列部分に入れる代わりに、きれいな URL ではパス情報を使用して一部のパラメータを表現できるため、"/index.php?r=news%2Fview&id=100" の代わりに "/news/Yii-is-released" のように、よりユーザーフレンドリーな URL を生成できます。
厳密な解析を有効にするかどうか。厳密な解析が有効になっている場合、受信した要求 URL は有効な要求として処理されるために、少なくとも $rules のいずれかと一致する必要があります。それ以外の場合、要求のパス情報部分は要求されたルートとして処理されます。このプロパティは、$enablePrettyUrl が true
の場合にのみ使用されます。
createAbsoluteUrl() が作成された URL の前に付加するために使用するホスト情報 (例: https://www.example.com
)。
この UrlManager で使用される yii\web\UrlNormalizer の構成。デフォルト値は false
であり、正規化はスキップされることを意味します。URL の正規化を有効にする場合は、このプロパティを手動で構成する必要があります。例:
[
'class' => 'yii\web\UrlNormalizer',
'collapseSlashes' => true,
'normalizeTrailingSlash' => true,
]
ルートの GET パラメータ名。このプロパティは、$enablePrettyUrl が false
の場合にのみ使用されます。
URLルールのデフォルト設定です。$rules で指定された個々のルール設定は、ルールの同じプロパティが設定されている場合、優先されます。
$enablePrettyUrl が true
の場合にURLを作成および解析するためのルールです。このプロパティは、$enablePrettyUrl が true
の場合にのみ使用されます。配列の各要素は、単一のURLルールを作成するための設定配列です。設定は、ルールオブジェクトを作成するために使用される前に、まず $ruleConfig とマージされます。
ルールが パターン と ルート のみを指定する場合、特別なショートカット形式を使用できます: 'pattern' => 'route'
。つまり、設定配列を使用する代わりに、キーをパターン、値を対応するルートとして使用できます。たとえば、'post/<id:\d+>' => 'post/view'
のようにします。
RESTfulルーティングの場合、上記のショートカット形式では、ルールが適用されるべき HTTP動詞 を指定することもできます。パターンにスペースで区切ってプレフィックスを付けることで指定できます。たとえば、'PUT post/<id:\d+>' => 'post/update'
のようにします。複数の動詞をカンマで区切って指定できます。例: 'POST,PUT post/index' => 'post/create'
。ショートカット形式でサポートされている動詞は、GET、HEAD、POST、PUT、PATCH、DELETE です。この方法で動詞を指定すると、mode は PARSING_ONLY に設定されるため、通常のGETリクエストに動詞を指定することは通常ないことに注意してください。
以下は、RESTful CRUDコントローラの設定例です。
[
'dashboard' => 'site/index',
'POST <controller:[\w-]+>' => '<controller>/create',
'<controller:[\w-]+>s' => '<controller>/index',
'PUT <controller:[\w-]+>/<id:\d+>' => '<controller>/update',
'DELETE <controller:[\w-]+>/<id:\d+>' => '<controller>/delete',
'<controller:[\w-]+>/<id:\d+>' => '<controller>/view',
];
UrlManagerオブジェクトの作成後にこのプロパティを変更する場合は、ルール設定ではなくルールオブジェクトで配列を設定してください。
createUrl() が作成された URL の前に付加するために使用するエントリスクリプト URL。
構築されたURLにエントリスクリプト名を表示するかどうか。デフォルトは true
です。このプロパティは、$enablePrettyUrl が true
の場合にのみ使用されます。
$enablePrettyUrl が true
のときに使用されるURLサフィックス。たとえば、".html" を使用して、URLが静的なHTMLページを指すように見せることができます。このプロパティは、$enablePrettyUrl が true
の場合にのみ使用されます。
メソッド詳細
定義: yii\base\Component::__call()
クラスメソッドではない指定されたメソッドを呼び出します。
このメソッドは、添付されたビヘイビアに指定されたメソッドがあるかどうかを確認し、利用可能な場合はそれを実行します。
このメソッドは、不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPマジックメソッドであるため、直接呼び出さないでください。
public mixed __call ( $name, $params ) | ||
$name | string |
メソッド名 |
$params | array |
メソッドパラメータ |
return | mixed |
メソッドの戻り値 |
---|---|---|
throws | 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()
コンポーネントプロパティの値を返します。
このメソッドは、次の順序でチェックし、それに応じて処理を行います。
- getterで定義されたプロパティ: getterの結果を返します
- ビヘイビアのプロパティ: ビヘイビアのプロパティ値を返します
このメソッドは、$value = $component->property;
を実行するときに暗黙的に呼び出されるPHPマジックメソッドであるため、直接呼び出さないでください。
__set() も参照してください。
public mixed __get ( $name ) | ||
$name | string |
プロパティ名 |
return | mixed |
プロパティの値、またはビヘイビアのプロパティの値 |
---|---|---|
throws | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
throws | 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
を返します。
isset($component->property)
を実行する際に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
以下も参照してください: https://www.php.net/manual/en/function.isset.php.
public boolean __isset ( $name ) | ||
$name | string |
プロパティ名またはイベント名 |
return | 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" という名前のビヘイビアをアタッチします。
- ビヘイビアのプロパティ: ビヘイビアのプロパティ値を設定します。
$component->property = $value;
を実行する際に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
以下も参照してください: __get().
public void __set ( $name, $value ) | ||
$name | string |
プロパティ名またはイベント名 |
$value | mixed |
プロパティの値 |
throws | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
---|---|---|
throws | 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 に設定します。
unset($component->property)
を実行する際に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
以下も参照してください: https://www.php.net/manual/en/function.unset.php.
public void __unset ( $name ) | ||
$name | string |
プロパティ名 |
throws | 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);
}
追加の URL ルールを追加します。
このメソッドは、指定されたルール宣言を解析するために buildRules() を呼び出し、既存の $rules にそれらを追加または挿入します。
$enablePrettyUrl が false
の場合、このメソッドは何もしないことに注意してください。
public void addRules ( $rules, $append = true ) | ||
$rules | array |
追加する新しいルール。各配列要素は単一のルール宣言を表します。許容されるルール形式については $rules を参照してください。 |
$append | boolean |
既存のルールの最後に追加して、新しいルールを追加するかどうか。 |
public function addRules($rules, $append = true)
{
if (!$this->enablePrettyUrl) {
return;
}
$rules = $this->buildRules($rules);
if ($append) {
$this->rules = array_merge($this->rules, $rules);
} else {
$this->rules = array_merge($rules, $this->rules);
}
}
定義元: yii\base\Component::attachBehavior()
ビヘイビアをこのコンポーネントにアタッチします。
このメソッドは、指定された構成に基づいてビヘイビアオブジェクトを作成します。その後、yii\base\Behavior::attach() メソッドを呼び出すことによって、ビヘイビアオブジェクトがこのコンポーネントにアタッチされます。
以下も参照してください: detachBehavior().
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
ビヘイビアの名前。 |
$behavior | string|array|yii\base\Behavior |
ビヘイビアの構成。これは以下のいずれかになります。
|
return | 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 ( ) | ||
return | array |
ビヘイビア構成。 |
---|
public function behaviors()
{
return [];
}
与えられたルール宣言から URL ルールオブジェクトを構築します。
protected yii\web\UrlRuleInterface[] buildRules ( $ruleDeclarations ) | ||
$ruleDeclarations | array |
ルール宣言。各配列要素は単一のルール宣言を表します。許容されるルール形式については $rules を参照してください。 |
return | yii\web\UrlRuleInterface[] |
指定されたルール宣言から構築されたルールオブジェクト |
---|---|---|
throws | yii\base\InvalidConfigException |
ルール宣言が無効な場合 |
protected function buildRules($ruleDeclarations)
{
$builtRules = $this->getBuiltRulesFromCache($ruleDeclarations);
if ($builtRules !== false) {
return $builtRules;
}
$builtRules = [];
$verbs = 'GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS';
foreach ($ruleDeclarations as $key => $rule) {
if (is_string($rule)) {
$rule = ['route' => $rule];
if (preg_match("/^((?:($verbs),)*($verbs))\\s+(.*)$/", $key, $matches)) {
$rule['verb'] = explode(',', $matches[1]);
$key = $matches[4];
}
$rule['pattern'] = $key;
}
if (is_array($rule)) {
$rule = Yii::createObject(array_merge($this->ruleConfig, $rule));
}
if (!$rule instanceof UrlRuleInterface) {
throw new InvalidConfigException('URL rule class must implement UrlRuleInterface.');
}
$builtRules[] = $rule;
}
$this->setBuiltRulesCache($ruleDeclarations, $builtRules);
return $builtRules;
}
ルールに対する createUrl() の結果を内部キャッシュにキャッシュすべきかどうかを示す値を返します。
以下も参照してください
protected boolean canBeCached ( yii\web\UrlRuleInterface $rule ) | ||
$rule | yii\web\UrlRuleInterface | |
return | boolean |
結果をキャッシュする必要がある場合は |
---|
protected function canBeCached(UrlRuleInterface $rule)
{
return
// if rule does not provide info about create status, we cache it every time to prevent bugs like #13350
// @see https://github.com/yiisoft/yii2/pull/13350#discussion_r114873476
!method_exists($rule, 'getCreateUrlStatus') || ($status = $rule->getCreateUrlStatus()) === null
|| $status === UrlRule::CREATE_STATUS_SUCCESS
|| $status & UrlRule::CREATE_STATUS_PARAMS_MISMATCH;
}
定義元: yii\base\Component::canGetProperty()
プロパティを読み取ることができるかどうかを示す値を返します。
プロパティは、以下の場合に読み取り可能です。
- クラスが、指定された名前に関連付けられたゲッターメソッドを持っている場合 (この場合、プロパティ名は大文字小文字を区別しません)。
- クラスが、指定された名前を持つメンバー変数を持っている場合 (
$checkVars
が true の場合)。 - アタッチされたビヘイビアが、指定された名前の読み取り可能なプロパティを持っている場合 (
$checkBehaviors
が true の場合)。
下記も参照してください。 canSetProperty().
public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
$checkBehaviors | boolean |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
return | 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 |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
return | 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 ( ) | ||
return | string |
このクラスの完全修飾名。 |
---|
public static function className()
{
return get_called_class();
}
指定されたルートとクエリパラメータを使用して絶対 URL を作成します。
このメソッドは、createUrl() によって作成された URL の先頭に、$hostInfo を付加します。
yii\helpers\Url::toRoute() とは異なり、このメソッドは常に指定されたルートを絶対ルートとして扱うことに注意してください。
下記も参照してください。 createUrl().
public string createAbsoluteUrl ( $params, $scheme = null ) | ||
$params | string|array |
ルートを表す文字列 (例: |
$scheme | string|null |
URL に使用するスキーム ( |
return | string |
作成された URL |
---|
public function createAbsoluteUrl($params, $scheme = null)
{
$params = (array) $params;
$url = $this->createUrl($params);
if (strpos($url, '://') === false) {
$hostInfo = $this->getHostInfo();
if (strncmp($url, '//', 2) === 0) {
$url = substr($hostInfo, 0, strpos($hostInfo, '://')) . ':' . $url;
} else {
$url = $hostInfo . $url;
}
}
return Url::ensureScheme($url, $scheme);
}
指定されたルートとクエリパラメータを使用して URL を作成します。
ルートは、文字列 (例: site/index
) として指定できます。作成する URL に追加のクエリパラメータを指定する場合は、配列を使用することもできます。配列形式は次のようである必要があります。
// generates: /index.php?r=site%2Findex¶m1=value1¶m2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']
アンカー付きの URL を作成する場合は、#
パラメータを使用する配列形式を使用できます。例えば、
// generates: /index.php?r=site%2Findex¶m1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']
作成される URL は相対 URL です。絶対 URL を作成するには、createAbsoluteUrl() を使用してください。
yii\helpers\Url::toRoute() とは異なり、このメソッドは常に指定されたルートを絶対ルートとして扱うことに注意してください。
public string createUrl ( $params ) | ||
$params | string|array |
ルートを表す文字列 (例: |
return | string |
作成された URL |
---|
public function createUrl($params)
{
$params = (array) $params;
$anchor = isset($params['#']) ? '#' . $params['#'] : '';
unset($params['#'], $params[$this->routeParam]);
$route = trim(isset($params[0]) ? $params[0] : '', '/');
unset($params[0]);
$baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();
if ($this->enablePrettyUrl) {
$cacheKey = $route . '?';
foreach ($params as $key => $value) {
if ($value !== null) {
$cacheKey .= $key . '&';
}
}
$url = $this->getUrlFromCache($cacheKey, $route, $params);
if ($url === false) {
/* @var $rule UrlRule */
foreach ($this->rules as $rule) {
if (in_array($rule, $this->_ruleCache[$cacheKey], true)) {
// avoid redundant calls of `UrlRule::createUrl()` for rules checked in `getUrlFromCache()`
// @see https://github.com/yiisoft/yii2/issues/14094
continue;
}
$url = $rule->createUrl($this, $route, $params);
if ($this->canBeCached($rule)) {
$this->setRuleToCache($cacheKey, $rule);
}
if ($url !== false) {
break;
}
}
}
if ($url !== false) {
if (strpos($url, '://') !== false) {
if ($baseUrl !== '' && ($pos = strpos($url, '/', 8)) !== false) {
return substr($url, 0, $pos) . $baseUrl . substr($url, $pos) . $anchor;
}
return $url . $baseUrl . $anchor;
} elseif (strncmp($url, '//', 2) === 0) {
if ($baseUrl !== '' && ($pos = strpos($url, '/', 2)) !== false) {
return substr($url, 0, $pos) . $baseUrl . substr($url, $pos) . $anchor;
}
return $url . $baseUrl . $anchor;
}
$url = ltrim($url, '/');
return "$baseUrl/{$url}{$anchor}";
}
if ($this->suffix !== null) {
$route .= $this->suffix;
}
if (!empty($params) && ($query = http_build_query($params)) !== '') {
$route .= '?' . $query;
}
$route = ltrim($route, '/');
return "$baseUrl/{$route}{$anchor}";
}
$url = "$baseUrl?{$this->routeParam}=" . urlencode($route);
if (!empty($params) && ($query = http_build_query($params)) !== '') {
$url .= '&' . $query;
}
return $url . $anchor;
}
定義元: yii\base\Component::detachBehavior()
コンポーネントからビヘイビアをデタッチします。
ビヘイビアの yii\base\Behavior::detach() メソッドが呼び出されます。
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
ビヘイビアの名前。 |
return | 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);
}
}
}
createUrl() が生成する URL に先頭に付加するベース URL を返します。
デフォルトでは、yii\web\Request::$baseUrl になります。これは主に、$enablePrettyUrl が true
で、$showScriptName が false
の場合に使用されます。
public string getBaseUrl ( ) | ||
return | string |
createUrl() が作成された URL の前に付加するために使用するベース URL。 |
---|---|---|
throws | yii\base\InvalidConfigException |
コンソールアプリケーションで実行中で、$baseUrl が構成されていない場合。 |
public function getBaseUrl()
{
if ($this->_baseUrl === null) {
$request = Yii::$app->getRequest();
if ($request instanceof Request) {
$this->_baseUrl = $request->getBaseUrl();
} else {
throw new InvalidConfigException('Please configure UrlManager::baseUrl correctly as you are running a console application.');
}
}
return $this->_baseUrl;
}
定義元: yii\base\Component::getBehavior()
指定された名前のビヘイビアオブジェクトを返します。
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
ビヘイビア名 |
return | 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 ( ) | ||
return | yii\base\Behavior[] |
このコンポーネントにアタッチされたビヘイビアのリスト |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
キャッシュから $ruleDeclarations に関連付けられた構築済みの URL ルールを提供します。
protected yii\web\UrlRuleInterface[]|false getBuiltRulesFromCache ( $ruleDeclarations ) | ||
$ruleDeclarations | array |
ルール宣言。各配列要素は単一のルール宣言を表します。許容されるルール形式については $rules を参照してください。 |
return | yii\web\UrlRuleInterface[]|false |
指定されたルール宣言から構築されたルールオブジェクト、または、この定義のキャッシュ項目が存在しない場合はブール値 |
---|
protected function getBuiltRulesFromCache($ruleDeclarations)
{
$cache = $this->ensureCache();
if (!$cache) {
return false;
}
return $cache->get([$this->cacheKey, $this->ruleConfig, $ruleDeclarations]);
}
createAbsoluteUrl() が生成する URL に先頭に付加するホスト情報を返します。
public string getHostInfo ( ) | ||
return | string |
createAbsoluteUrl() が作成された URL の前に付加するために使用するホスト情報 (例: |
---|---|---|
throws | yii\base\InvalidConfigException |
コンソールアプリケーションで実行していて、$hostInfo が構成されていない場合。 |
public function getHostInfo()
{
if ($this->_hostInfo === null) {
$request = Yii::$app->getRequest();
if ($request instanceof \yii\web\Request) {
$this->_hostInfo = $request->getHostInfo();
} else {
throw new InvalidConfigException('Please configure UrlManager::hostInfo correctly as you are running a console application.');
}
}
return $this->_hostInfo;
}
createUrl() が生成する URL に先頭に付加するエントリスクリプト URL を返します。
デフォルトでは yii\web\Request::$scriptUrl になります。これは主に、$enablePrettyUrl が false
の場合、または $showScriptName が true
の場合に使用されます。
public string getScriptUrl ( ) | ||
return | string |
createUrl() が作成された URL の前に付加するために使用するエントリスクリプト URL。 |
---|---|---|
throws | yii\base\InvalidConfigException |
コンソールアプリケーションで実行していて、$scriptUrl が構成されていない場合。 |
public function getScriptUrl()
{
if ($this->_scriptUrl === null) {
$request = Yii::$app->getRequest();
if ($request instanceof Request) {
$this->_scriptUrl = $request->getScriptUrl();
} else {
throw new InvalidConfigException('Please configure UrlManager::scriptUrl correctly as you are running a console application.');
}
}
return $this->_scriptUrl;
}
内部キャッシュに存在する場合、URL を取得します。
下記も参照してください。 createUrl().
protected boolean|string getUrlFromCache ( $cacheKey, $route, $params ) | ||
$cacheKey | string |
データを保存するための生成されたキャッシュキー。 |
$route | string |
ルート(例: |
$params | array |
ルールパラメーター。 |
return | boolean|string |
作成された URL |
---|
protected function getUrlFromCache($cacheKey, $route, $params)
{
if (!empty($this->_ruleCache[$cacheKey])) {
foreach ($this->_ruleCache[$cacheKey] as $rule) {
/* @var $rule UrlRule */
if (($url = $rule->createUrl($this, $route, $params)) !== false) {
return $url;
}
}
} else {
$this->_ruleCache[$cacheKey] = [];
}
return false;
}
定義元: yii\base\Component::hasEventHandlers()
指定された名前のイベントにハンドラがアタッチされているかどうかを示す値を返します。
public boolean hasEventHandlers ( $name ) | ||
$name | string |
イベント名 |
return | 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 |
ビヘイビアのメソッドをこのコンポーネントのメソッドとして扱うかどうか |
return | 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 |
ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか |
return | boolean |
プロパティが定義されているかどうか |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
UrlManager を初期化します。
public void init ( ) |
public function init()
{
parent::init();
if ($this->normalizer !== false) {
$this->normalizer = Yii::createObject($this->normalizer);
if (!$this->normalizer instanceof UrlNormalizer) {
throw new InvalidConfigException('`' . get_class($this) . '::normalizer` should be an instance of `' . UrlNormalizer::className() . '` or its DI compatible configuration.');
}
}
if (!$this->enablePrettyUrl) {
return;
}
if (!empty($this->rules)) {
$this->rules = $this->buildRules($this->rules);
}
}
定義元: yii\base\Component::off()
このコンポーネントから既存のイベントハンドラをデタッチします。
このメソッドは on() の逆です。
注:イベント名にワイルドカードパターンが渡された場合、このワイルドカードで登録されたハンドラーのみが削除され、このワイルドカードに一致するプレーン名で登録されたハンドラーは残ります。
on() も参照してください。
public boolean off ( $name, $handler = null ) | ||
$name | string |
イベント名 |
$handler | callable|null |
削除するイベントハンドラー。null の場合、名前付きイベントにアタッチされたすべてのハンドラーが削除されます。 |
return | 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;
}
イベントにイベントハンドラをアタッチします。
イベントハンドラーは有効な 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]);
}
}
ユーザリクエストを解析します。
public array|boolean parseRequest ( $request ) | ||
$request | yii\web\Request |
リクエストコンポーネント |
return | 配列|真偽値 |
ルートと関連付けられたパラメータ。 $enablePrettyUrl が |
---|
public function parseRequest($request)
{
if ($this->enablePrettyUrl) {
/* @var $rule UrlRule */
foreach ($this->rules as $rule) {
$result = $rule->parseRequest($this, $request);
if (YII_DEBUG) {
Yii::debug([
'rule' => method_exists($rule, '__toString') ? $rule->__toString() : get_class($rule),
'match' => $result !== false,
'parent' => null,
], __METHOD__);
}
if ($result !== false) {
return $result;
}
}
if ($this->enableStrictParsing) {
return false;
}
Yii::debug('No matching URL rules. Using default URL parsing logic.', __METHOD__);
$suffix = (string) $this->suffix;
$pathInfo = $request->getPathInfo();
$normalized = false;
if ($this->normalizer !== false) {
$pathInfo = $this->normalizer->normalizePathInfo($pathInfo, $suffix, $normalized);
}
if ($suffix !== '' && $pathInfo !== '') {
$n = strlen($this->suffix);
if (substr_compare($pathInfo, $this->suffix, -$n, $n) === 0) {
$pathInfo = substr($pathInfo, 0, -$n);
if ($pathInfo === '') {
// suffix alone is not allowed
return false;
}
} else {
// suffix doesn't match
return false;
}
}
if ($normalized) {
// pathInfo was changed by normalizer - we need also normalize route
return $this->normalizer->normalizeRoute([$pathInfo, []]);
}
return [$pathInfo, []];
}
Yii::debug('Pretty URL not enabled. Using default URL parsing logic.', __METHOD__);
$route = $request->getQueryParam($this->routeParam, '');
if (is_array($route)) {
$route = '';
}
return [(string) $route, []];
}
createUrl() が生成する URL に先頭に付加するベース URL を設定します。
これは主に、$enablePrettyUrl が true
で、$showScriptName が false
の場合に使用されます。
public void setBaseUrl ( $value ) | ||
$value | string |
createUrl() が作成された URL の前に付加するために使用するベース URL。 |
public function setBaseUrl($value)
{
$this->_baseUrl = $value === null ? null : rtrim(Yii::getAlias($value), '/');
}
キャッシュキーの一部として $rulesDeclaration を使用して、$builtRules をキャッシュに保存します。
protected 真偽値 setBuiltRulesCache ( $ruleDeclarations, $builtRules ) | ||
$ruleDeclarations | array |
ルール宣言。各配列要素は単一のルール宣言を表します。許容されるルール形式については $rules を参照してください。 |
$builtRules | yii\web\UrlRuleInterface[] |
指定されたルール宣言から構築されたルールオブジェクト。 |
return | boolean |
値が正常にキャッシュに格納されたかどうか。 |
---|
protected function setBuiltRulesCache($ruleDeclarations, $builtRules)
{
$cache = $this->ensureCache();
if (!$cache) {
return false;
}
return $cache->set([$this->cacheKey, $this->ruleConfig, $ruleDeclarations], $builtRules);
}
createAbsoluteUrl() が生成する URL に先頭に付加するホスト情報を設定します。
public void setHostInfo ( $value ) | ||
$value | string |
createAbsoluteUrl() で作成されたURLに先頭に追加されるホスト情報(例:"https://www.example.com")。 |
public function setHostInfo($value)
{
$this->_hostInfo = $value === null ? null : rtrim($value, '/');
}
ルール (例: yii\web\UrlRule) を内部キャッシュに保存します。
protected void setRuleToCache ( $cacheKey, yii\web\UrlRuleInterface $rule ) | ||
$cacheKey | ||
$rule | yii\web\UrlRuleInterface |
protected function setRuleToCache($cacheKey, UrlRuleInterface $rule)
{
$this->_ruleCache[$cacheKey][] = $rule;
}
createUrl() が生成する URL に先頭に付加するエントリスクリプト URL を設定します。
これは主に、$enablePrettyUrl が false
または $showScriptName が true
の場合に使用されます。
public void setScriptUrl ( $value ) | ||
$value | string |
createUrl() が作成された URL の前に付加するために使用するエントリスクリプト URL。 |
public function setScriptUrl($value)
{
$this->_scriptUrl = $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);
}
コメントするにはサインアップまたはログインしてください。