Yii2 助手类 Url

yii\helpers\Url 帮助类提供一系列的静态方法来帮助管理 URL。

用法示例:

// 类文件
use yii\helpers\Url;

$relativeHomeUrl = Url::home();               // "/index.php"
$absoluteHomeUrl = Url::home(true);           // "http://localhost/index.php"
$httpsAbsoluteHomeUrl = Url::home('https');   // "https://localhost/index.php"
$relativeBaseUrl = Url::base();               // "/"
$absoluteBaseUrl = Url::base(true);           // "http://localhost"
$httpsAbsoluteBaseUrl = Url::base('https');   // "https://localhost"

如果没有传任何参数,这个方法将会生成相对 URL 。你可以传 true 来获得一个针对当前协议的绝对 URL 。 或者,你可以明确的指定具体的协议类型(https, http)。

创建给定路由的 URL 地址, 使用 Url::toRoute() 方法:

// "/index.php/product/view.html"
$url = Url::toRoute('product/view');

// "/index.php/product/view.html"
$url = Url::toRoute(['product/view']);

// "http://localhost/index.php/product/view.html"
$url = Url::toRoute(['product/view'], true);

// "/index.php/product/view.html?id=2" 带参数
$url = Url::toRoute(['product/view', 'id'=>2]);

// "//index.php/product/view.html?id=2#name"
$url = Url::toRoute(['product/view', 'id'=>2, '#'=>'name']);

还有另外一个方法 Url::to() 和 Url::toRoute() 非常类似。这两个方法的唯一区别在于,前者要求一个路由必须用数组来指定。如果传的参数为字符串,它将会被直接当做 URL 。

// /index.php/site/index.html
echo Url::to(['site/index']);

// /index.php/site/index.html?src=ref1#name
echo Url::to(['site/index', 'src' => 'ref1', '#' => 'name']);

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

// /index.php/
echo Url::to();   //返回当前的 Url

// /images/logo.gif
echo Url::to('@web/images/logo.gif');

// images/logo.gif
echo Url::to('images/logo.gif');

// http://localhost/images/logo.gif
echo Url::to('@web/images/logo.gif', true);

// https://localhost/images/logo.gif
echo Url::to('@web/images/logo.gif', 'https');

有时,你需要记住一个 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');