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::toRoute()
メソッドを使用します。このメソッドは、yii\web\UrlManagerを使用してURLを作成します
$url = Url::toRoute(['product/view', 'id' => 42]);
ルートは、たとえば、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']
ルートは絶対または相対にすることができます。絶対ルートには先頭にスラッシュ(例:/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として扱われます。
最初の引数は次のいずれかになります。
['site/index']
、['post/index', 'page' => 2]
。ルートの指定方法の詳細については、toRoute()を参照してください。@
が付いた文字列:エイリアスとして扱われ、対応するエイリアス化された文字列が返されます。$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 を記憶しておき、その後の連続したリクエストの処理中に使用する必要がある場合があります。これは次の方法で実現できます。
// 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 が相対的であるか、つまりホスト情報部分がないかどうかを調べるには、次のコードを使用できます。
$isRelative = Url::isRelative('test/it');
タイプミスを見つけましたか、またはこのページを改善する必要があると思いますか?
github で編集する !
この条件は、ホームページかどうかをチェックする必要があります。
if ( Url::toRoute( Url::home() ) == Url::toRoute( Yii::$app->controller->getRoute() ) ) { // it is Home page }
コメントするには、サインアップ または ログイン してください。