
Url 帮助类提供一系列的静态方式来帮助管理 URL。
有两种获得通用 URLS 的方式 :当前请求的 home URL 和 base URL 。为了获得 home URL ,使用如下代码:
$relativeHomeUrl = Url::home();
$absoluteHomeUrl = Url::home(true);
$httpsAbsoluteHomeUrl = Url::home('https');
如果没有传任何参数,这个方式将会生成相对 URL 。你可以传 true 来获取一个针对当前协议的绝对 URL;或者,你可以确立的选定具体的协议类型( https , http )。
如下代码可以获得当前请求的 base 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/index¶m1=value1¶m2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']
如果你想要创建一个带有 anchor 的 URL ,你可以使用一个带有 # 参数的变量。比如:

// generates: /index.php?r=site/index¶m1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']
一个路由既可能是绝对的又或许是相对的。一个绝对的路由先前导斜杠开头(如: /site/index),而一个相对的路由则没有(比如: site/index 或者 index)。一个相对的路由将会根据如下规则转换为绝对路由:
从2.0.2版本开始,你可以用 alias 来指定一个路由。在这些状况下url(), alias 将会首先转化为实际的路由,然后会根据上述规则转化为绝对路由。
以下是该办法的一些示例:
// /index.php?r=site/index
echo Url::toRoute('site/index');
// /index.php?r=site/index&src=ref1#name
echo Url::toRoute(['site/index', 'src' => 'ref1', '#' => 'name']);
// /index.php?r=post/edit&id=100 假设别名 "@postEdit" 被定义为 "post/edit"
echo Url::toRoute(['@postEdit', 'id' => 100]);
// http://www.example.com/index.php?r=site/index
echo Url::toRoute('site/index', true);
// https://www.example.com/index.php?r=site/index
echo Url::toRoute('site/index', 'https');
还有另外一个方法 Url::to() 和 toRoute() 非常类似。这两个方法的唯一差别在于,前者规定一个路由必须用变量来选定。如果传的参数为字符串,它将要被直接当作 URL 。

Url::to() 的第一个参数可以是:
当 $scheme 指定了(无论是字符串还是 true ),一个带主机信息(通过 获得)的绝对 URL 将会被返回。如果 $url 已经是绝对 URL 了,它的协议信息将会被更换为选定的( https 或者 http )。
以下是一些使用例子:
// /index.php?r=site/index
echo Url::to(['site/index']);
// /index.php?r=site/index&src=ref1#name
echo Url::to(['site/index', 'src' => 'ref1', '#' => 'name']);
// /index.php?r=post/edit&id=100 假设别名 "@postEdit" 被定义为 "post/edit"
echo Url::to(['@postEdit', 'id' => 100]);
// 当前请求的 URL
echo Url::to();
// /images/logo.gif
echo Url::to('@web/images/logo.gif');
// images/logo.gif
echo Url::to('images/logo.gif');
// http://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版本开始,你可以使用 来建立一个基于当前请求路由和 GET 参数的 URL。你可以借助传递一个 $params 给这个方式来添加以及删除 GET 参数。例如:
// 假设 $_GET = ['id' => 123, 'src' => 'google'],当前路由为 "post/view"
// /index.php?r=post/view&id=123&src=google
echo Url::current();
// /index.php?r=post/view&id=123
echo Url::current(['src' => null]);
// /index.php?r=post/view&id=100&src=google
echo Url::current(['id' => 100]);

有时,你必须记住一个 URL 并在后续的请求处理中使用它。你可以用下面形式达到这个目的:
// 记住当前 URL
Url::remember();
// 记住指定的 URL。参数格式请参阅 Url::to()。
Url::remember(['product/view', 'id' => 42]);
// 记住用给定名称指定的 URL
Url::remember(['product/view', 'id' => 42], 'product');
在后续的请求处理中url(),可以用如下方式获取记住的 URL:
$url = Url::previous();
$productUrl = Url::previous('product');
你可以用如下代码检测一个 URL 是否是相对的(比如,包含主机信息部分)。
$isRelative = Url::isRelative('test/it');
Html 助手(Html)

发现错别字或您觉得此页面应该改进?
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-138968-1.html
看看英国多聪明
好机智幽默得体不抖包袱真的很棒
当心被控告到时候会赔死