类 yii\helpers\Url
继承关系 | yii\helpers\Url » yii\helpers\BaseUrl |
---|---|
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/helpers/Url.php |
Url 提供了一组用于管理 URL 的静态方法。
有关 Url 的更多详细信息和使用信息,请参阅url 助手指南文章。
公共方法
方法 | 描述 | 定义于 |
---|---|---|
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 是否为相对 URL。 | yii\helpers\BaseUrl |
previous() | 返回之前记住的 URL。 | yii\helpers\BaseUrl |
remember() | 记住指定的 URL,以便以后可以通过previous()取回。 | yii\helpers\BaseUrl |
to() | 根据给定的参数创建 URL。 | yii\helpers\BaseUrl |
toRoute() | 为给定的路由创建 URL。 | yii\helpers\BaseUrl |
受保护的方法
方法 | 描述 | 定义于 |
---|---|---|
getUrlManager() | yii\helpers\BaseUrl | |
normalizeRoute() | 规范化路由并使其适合 UrlManager。绝对路由保持原样,而相对路由则转换为绝对路由。 | yii\helpers\BaseUrl |
方法详情
定义于: yii\helpers\BaseUrl::base()
返回当前请求的基本 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;
}
定义于: yii\helpers\BaseUrl::canonical()
返回当前请求页面的规范 URL。
规范 URL 是使用当前控制器的yii\web\Controller::$route和yii\web\Controller::$actionParams构建的。您可以在布局视图中使用以下代码添加有关规范 URL 的链接标签
$this->registerLinkTag(['rel' => 'canonical', 'href' => Url::canonical()]);
public static string canonical ( ) | ||
返回 | 字符串 |
当前请求页面的规范 URL |
---|
public static function canonical()
{
$params = Yii::$app->controller->actionParams;
$params[0] = Yii::$app->controller->getRoute();
return static::getUrlManager()->createAbsoluteUrl($params);
}
定义于: yii\helpers\BaseUrl::current()
使用当前路由和 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
模型,其中参数名称为 PostSearchForm[id]
和 PostSearchForm[src]
,语法如下:
// 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 | 数组 |
一个关联数组,其中的参数将与当前 GET 参数合并。如果参数值为 null,则相应的 GET 参数将被删除。 |
$scheme | boolean|string |
在生成的 URL 中使用的 URI 方案
|
返回 | 字符串 |
生成的 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);
}
public static 字符串 ensureScheme ( $url, $scheme ) | ||
$url | 字符串 |
要处理的 URL |
$scheme | 字符串 |
URL 中使用的 URI 方案(例如 |
返回 | 字符串 |
处理后的 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();
}
定义于: yii\helpers\BaseUrl::home()
返回主页 URL。
public static 字符串 home ( $scheme = false ) | ||
$scheme | boolean|string |
要用于返回 URL 的 URI 方案
|
返回 | 字符串 |
主页 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;
}
public static 布尔值 isRelative ( $url ) | ||
$url | 字符串 |
要检查的 URL |
返回 | 布尔值 |
URL 是否为相对 URL |
---|
public static function isRelative($url)
{
return preg_match('~^[[:alpha:]][[:alnum:]+-.]*://|^//~', $url) === 0;
}
定义于: yii\helpers\BaseUrl::normalizeRoute()
规范化路由并使其适合 UrlManager。绝对路由保持原样,而相对路由则转换为绝对路由。
相对路由是不带前导斜杠的路由,例如“view”、“post/view”。
- 如果路由为空字符串,则将使用当前的 路由;
- 如果路由根本不包含斜杠,则将其视为当前控制器的操作 ID,并在其前面加上 yii\web\Controller::$uniqueId;
- 如果路由没有前导斜杠,则将其视为相对于当前模块的路由,并在其前面加上模块的 uniqueId。
从 2.0.2 版本开始,路由也可以指定为别名。在这种情况下,将在进行上述转换步骤之前先将别名转换为实际路由。
protected static 字符串 normalizeRoute ( $route ) | ||
$route | 字符串 |
路由。这可以是绝对路由或相对路由。 |
返回 | 字符串 |
适合 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 字符串|空 previous ( $name = null ) | ||
$name | 字符串|空 |
与之前记住的 URL 关联的名称。如果未设置,则将使用 yii\web\User::getReturnUrl() 获取记住的 URL。 |
返回 | 字符串|空 |
之前记住的 URL。如果未记住给定名称的 URL 且未指定 |
---|
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 | 字符串|数组 |
要记住的 URL。有关可接受的格式,请参阅 to()。如果未指定此参数,则将使用当前请求的 URL。 |
$name | 字符串|空 |
与要记住的 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);
}
}
定义于: yii\helpers\BaseUrl::to()
根据给定的参数创建 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 字符串 to ( $url = '', $scheme = false ) | ||
$url | 数组|字符串 |
用于生成有效 URL 的参数 |
$scheme | boolean|string |
在生成的 URL 中使用的 URI 方案
|
返回 | 字符串 |
生成的 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);
}
定义于: yii\helpers\BaseUrl::toRoute()
为给定的路由创建 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
),则将其视为当前控制器的操作 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');
公共静态 字符串 toRoute ( $route, $scheme = false ) | ||
$route | 字符串|数组 |
使用字符串表示路由(例如 |
$scheme | boolean|string |
在生成的 URL 中使用的 URI 方案
|
返回 | 字符串 |
生成的 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);
}
注册 或 登录 以发表评论。