2 フォロワー

Urlヘルパー

Urlヘルパーは、URLを管理するための静的メソッドのセットを提供します。

共通URLの取得

共通URLを取得するために使用できる2つのメソッドがあります。ホームURLと現在のリクエストのベースURLです。ホームURLを取得するには、次を使用します

$relativeHomeUrl = Url::home();
$absoluteHomeUrl = Url::home(true);
$httpsAbsoluteHomeUrl = Url::home('https');

パラメータが渡されない場合、生成されたURLは相対URLです。現在のスキーマの絶対URLを取得するためにtrueを渡すか、スキーマを明示的に指定することができます(https, http)。

現在のリクエストのベースURLを取得するには、次を使用します

$relativeBaseUrl = Url::base();
$absoluteBaseUrl = Url::base(true);
$httpsAbsoluteBaseUrl = Url::base('https');

このメソッドの唯一のパラメータは、Url::home()とまったく同じように機能します。

URLの作成

指定されたルートへのURLを作成するには、Url::toRoute()メソッドを使用します。このメソッドは、yii\web\UrlManagerを使用してURLを作成します

$url = Url::toRoute(['product/view', 'id' => 42]);

ルートは、たとえば、site/indexのような文字列として指定できます。作成されるURLに追加のクエリパラメータを指定したい場合は、配列を使用することもできます。配列の形式は、次のとおりである必要があります。

// generates: /index.php?r=site%2Findex&param1=value1&param2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']

アンカー付きのURLを作成する場合は、#パラメータ付きの配列形式を使用できます。例えば、

// generates: /index.php?r=site%2Findex&param1=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']);

// /index.php?r=post%2Fedit&id=100     assume the alias "@postEdit" is defined as "post/edit"
echo Url::toRoute(['@postEdit', 'id' => 100]);

// 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');

toRoute()に非常によく似た別のメソッドUrl::to()があります。唯一の違いは、このメソッドはルートを配列としてのみ指定する必要があることです。文字列が与えられた場合は、URLとして扱われます。

最初の引数は次のいずれかになります。

  • 配列:URLを生成するためにtoRoute()が呼び出されます。例:['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%2Fedit&id=100     assume the alias "@postEdit" is defined as "post/edit"
echo Url::to(['@postEdit', 'id' => 100]);

// 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');

バージョン 2.0.3 以降では、yii\helpers\Url::current() を使用して、現在リクエストされているルートと GET パラメータに基づいて URL を作成できます。メソッドに $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]);

URL を記憶する

URL を記憶しておき、その後の連続したリクエストの処理中に使用する必要がある場合があります。これは次の方法で実現できます。

// Remember current URL 
Url::remember();

// Remember URL specified. See Url::to() for argument format.
Url::remember(['product/view', 'id' => 42]);

// Remember URL specified with a name given
Url::remember(['product/view', 'id' => 42], 'product');

次のリクエストでは、次のようにして記憶された URL を取得できます。

$url = Url::previous();
$productUrl = Url::previous('product');

相対 URL の確認

URL が相対的であるか、つまりホスト情報部分がないかどうかを調べるには、次のコードを使用できます。

$isRelative = Url::isRelative('test/it');

タイプミスを見つけましたか、またはこのページを改善する必要があると思いますか?
github で編集する !