クラス yii\helpers\BaseUrl
継承 | yii\helpers\BaseUrl |
---|---|
サブクラス | yii\helpers\Url |
利用可能なバージョン | 2.0 |
ソースコード | https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseUrl.php |
BaseUrl は yii\helpers\Url の具体的な実装を提供します。
BaseUrl は使用しないでください。yii\helpers\Url を代わりに使用してください。
公開プロパティ
プロパティ | 型 | 説明 | 定義元 |
---|---|---|---|
$urlManager | yii\web\UrlManager | URLの作成に使用するURLマネージャー | yii\helpers\BaseUrl |
公開メソッド
メソッド | 説明 | 定義元 |
---|---|---|
base() | 現在のリクエストの基本URLを返します。 | yii\helpers\BaseUrl |
canonical() | 現在要求されているページの標準URLを返します。 | yii\helpers\BaseUrl |
current() | 現在のルートとGETパラメーターを使用してURLを作成します。 | yii\helpers\BaseUrl |
ensureScheme() | 指定されたスキームを使用するようにURLを正規化します。 | yii\helpers\BaseUrl |
home() | ホームURLを返します。 | yii\helpers\BaseUrl |
isRelative() | URLが相対的かどうかを示す値を返します。 | yii\helpers\BaseUrl |
previous() | 以前に記憶された URLを返します。 | yii\helpers\BaseUrl |
remember() | previous()で後で取得できるように、指定されたURLを記憶します。 | yii\helpers\BaseUrl |
to() | 指定されたパラメーターに基づいてURLを作成します。 | yii\helpers\BaseUrl |
toRoute() | 指定されたルートのURLを作成します。 | yii\helpers\BaseUrl |
保護されたメソッド
メソッド | 説明 | 定義元 |
---|---|---|
getUrlManager() | yii\helpers\BaseUrl | |
normalizeRoute() | ルートを正規化し、UrlManagerに適したものにします。絶対ルートはそのまま残り、相対ルートは絶対ルートに変換されます。 | yii\helpers\BaseUrl |
プロパティの詳細
URLの作成に使用するURLマネージャー
メソッドの詳細
現在のリクエストの基本URLを返します。
public static string base ( $scheme = false ) | ||
$scheme | boolean|string |
返される基本URLで使用されるURIスキーム
|
public static function base($scheme = false)
{
$url = static::getUrlManager()->getBaseUrl();
if ($scheme !== false) {
$url = static::getUrlManager()->getHostInfo() . $url;
$url = static::ensureScheme($url, $scheme);
}
return $url;
}
現在要求されているページの標準URLを返します。
標準URLは、現在のコントローラーのyii\web\Controller::$routeとyii\web\Controller::$actionParamsを使用して構築されます。レイアウトビューで次のコードを使用して、標準URLに関するlinkタグを追加できます。
$this->registerLinkTag(['rel' => 'canonical', 'href' => Url::canonical()]);
public static string canonical ( ) | ||
戻り値 | string |
現在要求されているページの標準URL |
---|
public static function canonical()
{
$params = Yii::$app->controller->actionParams;
$params[0] = Yii::$app->controller->getRoute();
return static::getUrlManager()->createAbsoluteUrl($params);
}
現在のルートとGETパラメーターを使用してURLを作成します。
GETパラメーターの一部を変更または削除したり、$params
パラメーターを通じて追加のクエリパラメーターを追加したりできます。特に、パラメーターをnullに指定すると、このパラメーターは既存のGETパラメーターから削除されます。$params
で指定されたその他のパラメーターは、既存のGETパラメーターとマージされます。例えば、
// assume $_GET = ['id' => 123, 'src' => 'google'], current route is "post/view"
// /index.php?r=post%2Fview&id=123&src=google
echo Url::current();
// /index.php?r=post%2Fview&id=123
echo Url::current(['src' => null]);
// /index.php?r=post%2Fview&id=100&src=google
echo Url::current(['id' => 100]);
最後に[]
を使用して配列パラメーターを置き換える場合は、$params
をネストされた配列として指定する必要があります。パラメーター名がPostSearchForm[id]
とPostSearchForm[src]
であるPostSearchForm
モデルの場合、構文は以下のようになります。
// index.php?r=post%2Findex&PostSearchForm%5Bid%5D=100&PostSearchForm%5Bsrc%5D=google
echo Url::current([
$postSearch->formName() => ['id' => 100, 'src' => 'google'],
]);
public static string current ( array $params = [], $scheme = false ) | ||
$params | array |
現在のGETパラメーターとマージされるパラメーターの連想配列。パラメーター値がnullの場合、対応するGETパラメーターは削除されます。 |
$scheme | boolean|string |
生成されたURLで使用されるURIスキーム
|
戻り値 | string |
生成されたURL |
---|
public static function current(array $params = [], $scheme = false)
{
$currentParams = Yii::$app->getRequest()->getQueryParams();
$currentParams[0] = '/' . Yii::$app->controller->getRoute();
$route = array_replace_recursive($currentParams, $params);
return static::toRoute($route, $scheme);
}
指定されたスキームを使用するようにURLを正規化します。
URLが相対的であるか、スキームが文字列でない場合、正規化はスキップされます。
public static string ensureScheme ( $url, $scheme ) | ||
$url | string |
処理するURL |
$scheme | string |
URLで使用されるURIスキーム(例:`http`または`https`)。プロトコル相対URL(例:`//example.com/path`)を作成するには、空文字列を使用します。 |
戻り値 | string |
処理されたURL |
---|
public static function ensureScheme($url, $scheme)
{
if (static::isRelative($url) || !is_string($scheme)) {
return $url;
}
if (strncmp($url, '//', 2) === 0) {
// e.g. //example.com/path/to/resource
return $scheme === '' ? $url : "$scheme:$url";
}
if (($pos = strpos($url, '://')) !== false) {
if ($scheme === '') {
$url = substr($url, $pos + 1);
} else {
$url = $scheme . substr($url, $pos);
}
}
return $url;
}
protected static yii\web\UrlManager getUrlManager ( ) | ||
戻り値 | yii\web\UrlManager |
URLの作成に使用されるURLマネージャー |
---|
protected static function getUrlManager()
{
return static::$urlManager ?: Yii::$app->getUrlManager();
}
ホームURLを返します。
public static string home ( $scheme = false ) | ||
$scheme | boolean|string |
返されるURLに使用するURIスキーム
|
戻り値 | string |
ホームURL |
---|
public static function home($scheme = false)
{
$url = Yii::$app->getHomeUrl();
if ($scheme !== false) {
$url = static::getUrlManager()->getHostInfo() . $url;
$url = static::ensureScheme($url, $scheme);
}
return $url;
}
URLが相対的かどうかを示す値を返します。
相対URLにはホスト情報部分が含まれていません。
public static boolean isRelative ( $url ) | ||
$url | string |
確認するURL |
戻り値 | boolean |
URLが相対的かどうか |
---|
public static function isRelative($url)
{
return preg_match('~^[[:alpha:]][[:alnum:]+-.]*://|^//~', $url) === 0;
}
ルートを正規化し、UrlManagerに適したものにします。絶対ルートはそのまま残り、相対ルートは絶対ルートに変換されます。
相対ルートは、先頭にスラッシュがないルートです(例:「view」、「post/view」)。
- ルートが空文字列の場合、現在のルートが使用されます。
- ルートにスラッシュが全く含まれていない場合、現在のコントローラーのアクションIDとみなされ、yii\web\Controller::$uniqueIdが前に付けられます。
- ルートに先頭のスラッシュがない場合、現在のモジュールを基準とするルートとみなされ、モジュールのuniqueIdが前に付けられます。
バージョン2.0.2以降、ルートはエイリアスとして指定することもできます。この場合、上記の変換手順を実行する前に、エイリアスが実際のルートに変換されます。
protected static string normalizeRoute ( $route ) | ||
$route | string |
ルート。絶対ルートまたは相対ルートのいずれかです。 |
戻り値 | string |
UrlManagerに適した正規化されたルート |
---|---|---|
例外発生 | yii\base\InvalidArgumentException |
アクティブなコントローラーが存在しない状態で相対ルートが指定された場合 |
protected static function normalizeRoute($route)
{
$route = Yii::getAlias((string) $route);
if (strncmp($route, '/', 1) === 0) {
// absolute route
return ltrim($route, '/');
}
// relative route
if (Yii::$app->controller === null) {
throw new InvalidArgumentException("Unable to resolve the relative route: $route. No active controller is available.");
}
if (strpos($route, '/') === false) {
// empty or an action ID
return $route === '' ? Yii::$app->controller->getRoute() : Yii::$app->controller->getUniqueId() . '/' . $route;
}
// relative to module
return ltrim(Yii::$app->controller->module->getUniqueId() . '/' . $route, '/');
}
public static string|null previous ( $name = null ) | ||
$name | string|null |
以前に記憶されたURLに関連付けられた名前。設定されていない場合、yii\web\User::getReturnUrl()を使用して記憶されたURLを取得します。 |
戻り値 | string|null |
以前に記憶されたURL。指定された名前でURLが記憶されておらず、`$name`が指定されていない場合、Nullが返されます。 |
---|
public static function previous($name = null)
{
if ($name === null) {
return Yii::$app->getUser()->getReturnUrl();
}
return Yii::$app->getSession()->get($name);
}
public static void remember ( $url = '', $name = null ) | ||
$url | string|array |
記憶するURL。to()で許容される形式を参照してください。このパラメーターが指定されていない場合、現在要求されているURLが使用されます。 |
$name | string|null |
記憶されるURLに関連付けられた名前。後でprevious()で使用できます。設定されていない場合、渡されたURLを使用してyii\web\User::setReturnUrl()が使用されます。 |
public static function remember($url = '', $name = null)
{
$url = static::to($url);
if ($name === null) {
Yii::$app->getUser()->setReturnUrl($url);
} else {
Yii::$app->getSession()->set($name, $url);
}
}
指定されたパラメーターに基づいてURLを作成します。
このメソッドはtoRoute()と非常に似ています。唯一の違いは、このメソッドではルートを配列のみで指定する必要があることです。文字列が与えられると、URLとして扱われます。特に、`$url`が
- 配列の場合:toRoute()が呼び出されてURLが生成されます。例:`['site/index']`、`['post/index', 'page' => 2]`。toRoute()で、ルートの指定方法の詳細を参照してください。
- 先頭に`@`が付いた文字列の場合:エイリアスとして扱われ、対応するエイリアスの文字列が返されます。
- 空文字列の場合:現在要求されているURLが返されます。
- 通常の文字列の場合:そのまま返されます。
`$scheme`が指定されている場合(文字列または`true`)、ホスト情報(yii\web\UrlManager::$hostInfoから取得)を含む絶対URLが返されます。`$url`が既に絶対URLである場合、そのスキームは指定されたものに置き換えられます。
このメソッドの使用例を以下に示します。
// /index.php?r=site%2Findex
echo Url::to(['site/index']);
// /index.php?r=site%2Findex&src=ref1#name
echo Url::to(['site/index', 'src' => 'ref1', '#' => 'name']);
// /index.php?r=post%2Findex assume the alias "@posts" is defined as "/post/index"
echo Url::to(['@posts']);
// the currently requested URL
echo Url::to();
// /images/logo.gif
echo Url::to('@web/images/logo.gif');
// images/logo.gif
echo Url::to('images/logo.gif');
// https://www.example.com/images/logo.gif
echo Url::to('@web/images/logo.gif', true);
// https://www.example.com/images/logo.gif
echo Url::to('@web/images/logo.gif', 'https');
// //www.example.com/images/logo.gif
echo Url::to('@web/images/logo.gif', '');
public static string to ( $url = '', $scheme = false ) | ||
$url | array|string |
有効なURLを生成するために使用されるパラメーター |
$scheme | boolean|string |
生成されたURLで使用されるURIスキーム
|
戻り値 | string |
生成されたURL |
---|---|---|
例外発生 | yii\base\InvalidArgumentException |
アクティブなコントローラーが存在しない状態で相対ルートが指定された場合 |
public static function to($url = '', $scheme = false)
{
if (is_array($url)) {
return static::toRoute($url, $scheme);
}
$url = Yii::getAlias($url);
if ($url === '') {
$url = Yii::$app->getRequest()->getUrl();
}
if ($scheme === false) {
return $url;
}
if (static::isRelative($url)) {
// turn relative URL into absolute
$url = static::getUrlManager()->getHostInfo() . '/' . ltrim($url, '/');
}
return static::ensureScheme($url, $scheme);
}
指定されたルートのURLを作成します。
このメソッドは、yii\web\UrlManager を使用してURLを作成します。
ルートは文字列(例: site/index
)で指定できます。URLにクエリパラメータを追加したい場合は、配列を使用することもできます。配列の形式は次のとおりです。
// generates: /index.php?r=site/index¶m1=value1¶m2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']
アンカー付きのURLを作成する場合は、#
パラメータを含む配列形式を使用できます。例えば、
// generates: /index.php?r=site/index¶m1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']
ルートは絶対パスまたは相対パスのいずれかです。絶対パスは先頭にスラッシュが付きます(例: /site/index
)。相対パスにはスラッシュがありません(例: site/index
またはindex
)。相対パスは、以下のルールに従って絶対パスに変換されます。
- ルートが空文字列の場合、現在のルートが使用されます。
- ルートにスラッシュが含まれていない場合(例:
index
)、現在のコントローラのaction IDとみなされ、yii\web\Controller::$uniqueId が先頭に付加されます。 - ルートに先頭のスラッシュがない場合(例:
site/index
)、現在のモジュールに対する相対ルートとみなされ、モジュールのuniqueId が先頭に付加されます。
バージョン2.0.2以降、ルートはエイリアスとして指定することもできます。この場合、上記の変換手順を実行する前に、エイリアスが実際のルートに変換されます。
このメソッドの使用例を以下に示します。
// /index.php?r=site%2Findex
echo Url::toRoute('site/index');
// /index.php?r=site%2Findex&src=ref1#name
echo Url::toRoute(['site/index', 'src' => 'ref1', '#' => 'name']);
// https://www.example.com/index.php?r=site%2Findex
echo Url::toRoute('site/index', true);
// https://www.example.com/index.php?r=site%2Findex
echo Url::toRoute('site/index', 'https');
// /index.php?r=post%2Findex assume the alias "@posts" is defined as "post/index"
echo Url::toRoute('@posts');
public static string toRoute ( $route, $scheme = false ) | ||
$route | string|array |
ルートを表す文字列(例: |
$scheme | boolean|string |
生成されたURLで使用されるURIスキーム
|
戻り値 | string |
生成されたURL |
---|---|---|
例外発生 | yii\base\InvalidArgumentException |
アクティブなコントローラーが存在しない状態で相対ルートが指定された場合 |
public static function toRoute($route, $scheme = false)
{
$route = (array) $route;
$route[0] = static::normalizeRoute($route[0]);
if ($scheme !== false) {
return static::getUrlManager()->createAbsoluteUrl($route, is_string($scheme) ? $scheme : null);
}
return static::getUrlManager()->createUrl($route);
}
コメントするにはサインアップまたはログインしてください。