0 关注者

类 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 助手指南文章

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$urlManager yii\web\UrlManager 用于创建 URL 的 URL 管理器 yii\helpers\BaseUrl

公共方法

隐藏继承的方法

方法 描述 定义于
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

方法详情

隐藏继承的方法

base() 公共静态方法

定义于: yii\helpers\BaseUrl::base()

返回当前请求的基本 URL。

public static string base ( $scheme false )
$scheme boolean|string

在返回的基本 URL 中使用的 URI 方案

  • false(默认):返回不包含主机信息的基 URL。
  • true:返回一个绝对基 URL,其方案与yii\web\UrlManager::$hostInfo中的方案相同。
  • 字符串:返回一个具有指定方案的绝对基 URL(httphttps 或空字符串表示协议相对 URL)。

                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;
}

            
canonical() 公共静态方法

定义于: yii\helpers\BaseUrl::canonical()

返回当前请求页面的规范 URL。

规范 URL 是使用当前控制器的yii\web\Controller::$routeyii\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);
}

            
current() 公共静态方法(自版本 2.0.3 起可用)

定义于: 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 方案

  • false(默认):生成相对 URL。
  • true:返回一个绝对基 URL,其方案与yii\web\UrlManager::$hostInfo中的方案相同。
  • 字符串:生成一个具有指定方案的绝对 URL(httphttps 或空字符串表示协议相对 URL)。
返回 字符串

生成的 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);
}

            
ensureScheme() 公共静态方法(自版本 2.0.11 起可用)

定义于: yii\helpers\BaseUrl::ensureScheme()

通过确保其使用指定的方案来规范化 URL。

如果 URL 是相对 URL 或方案不是字符串,则跳过规范化。

public static 字符串 ensureScheme ( $url, $scheme )
$url 字符串

要处理的 URL

$scheme 字符串

URL 中使用的 URI 方案(例如 httphttps)。使用空字符串创建协议相对 URL(例如 //example.com/path

返回 字符串

处理后的 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;
}

            
getUrlManager() 受保护的静态方法(自版本 2.0.8 起可用)
protected static yii\web\UrlManager getUrlManager ( )
返回 yii\web\UrlManager

用于创建 URL 的 URL 管理器

                protected static function getUrlManager()
{
    return static::$urlManager ?: Yii::$app->getUrlManager();
}

            
home() 公共静态方法

定义于: yii\helpers\BaseUrl::home()

返回主页 URL。

public static 字符串 home ( $scheme false )
$scheme boolean|string

要用于返回 URL 的 URI 方案

  • false(默认):返回相对 URL。
  • true:返回一个绝对基 URL,其方案与yii\web\UrlManager::$hostInfo中的方案相同。
  • 字符串:返回具有指定方案的绝对 URL(httphttps 或空字符串用于协议相对 URL)。
返回 字符串

主页 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;
}

            
isRelative() 公共静态方法

定义于: yii\helpers\BaseUrl::isRelative()

返回一个值,指示 URL 是否为相对 URL。

相对 URL 没有主机信息部分。

public static 布尔值 isRelative ( $url )
$url 字符串

要检查的 URL

返回 布尔值

URL 是否为相对 URL

                public static function isRelative($url)
{
    return preg_match('~^[[:alpha:]][[:alnum:]+-.]*://|^//~', $url) === 0;
}

            
normalizeRoute() 受保护的静态方法

定义于: 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, '/');
}

            
previous() 公共静态方法

定义于: yii\helpers\BaseUrl::previous()

返回之前记住的 URL。

另请参阅

public static 字符串| previous ( $name null )
$name 字符串|

与之前记住的 URL 关联的名称。如果未设置,则将使用 yii\web\User::getReturnUrl() 获取记住的 URL。

返回 字符串|

之前记住的 URL。如果未记住给定名称的 URL 且未指定 $name,则返回空。

                public static function previous($name = null)
{
    if ($name === null) {
        return Yii::$app->getUser()->getReturnUrl();
    }
    return Yii::$app->getSession()->get($name);
}

            
remember() 公共静态方法

定义于: yii\helpers\BaseUrl::remember()

记住指定的 URL,以便以后可以通过previous()取回。

另请参阅

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);
    }
}

            
to() 公共静态方法

定义于: 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 方案

  • false(默认):生成相对 URL。
  • true:返回一个绝对基 URL,其方案与yii\web\UrlManager::$hostInfo中的方案相同。
  • 字符串:生成一个具有指定方案的绝对 URL(httphttps 或空字符串表示协议相对 URL)。
返回 字符串

生成的 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);
}

            
toRoute() 公共静态方法

定义于: yii\helpers\BaseUrl::toRoute()

为给定的路由创建 URL。

此方法将使用 yii\web\UrlManager 创建 URL。

您可以将路由指定为字符串,例如 site/index。如果要为正在创建的 URL 指定其他查询参数,也可以使用数组。数组格式必须为

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

如果要使用锚点创建 URL,则可以使用带有 # 参数的数组格式。例如,

// generates: /index.php?r=site/index&param1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']

路由可以是绝对的也可以是相对的。绝对路由具有前导斜杠(例如 /site/index),而相对路由没有(例如 site/indexindex)。相对路由将根据以下规则转换为绝对路由

  • 如果路由为空字符串,则将使用当前的 路由
  • 如果路由根本不包含斜杠(例如 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 字符串|数组

使用字符串表示路由(例如 indexsite/index),或使用数组表示带有查询参数的路由(例如 ['site/index', 'param1' => 'value1'])。

$scheme boolean|string

在生成的 URL 中使用的 URI 方案

  • false(默认):生成相对 URL。
  • true:返回一个绝对基 URL,其方案与yii\web\UrlManager::$hostInfo中的方案相同。
  • 字符串:生成一个具有指定方案的绝对 URL(httphttps 或空字符串表示协议相对 URL)。
返回 字符串

生成的 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);
}