0 关注者

类 yii\helpers\BaseUrl

继承关系yii\helpers\BaseUrl
子类yii\helpers\Url
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseUrl.php

BaseUrl 为 yii\helpers\Url 提供具体实现。

请勿使用 BaseUrl。请改用 yii\helpers\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

属性详情

隐藏继承属性

$urlManager 公共静态属性 (自版本 2.0.8 起可用)

用于创建 URL 的 URL 管理器

public static yii\web\UrlManager $urlManager null

方法详情

隐藏继承方法

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() 公共静态方法

返回当前请求页面的规范 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 起可用)

使用当前路由和 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 array 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 起可用)

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

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

public static string 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() 公共静态方法

返回主页 URL。

public static string 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() 公共静态方法

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

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

public static boolean isRelative ( $url )
$url 字符串

要检查的 URL

返回 布尔值

URL 是否为相对 URL

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

            
normalizeRoute() 受保护的静态方法

规范化路由并使其适合 UrlManager。绝对路由保持不变,而相对路由则转换为绝对路由。

相对路由是不带前导斜杠的路由,例如“view”、“post/view”。

  • 如果路由是空字符串,则将使用当前的 路由
  • 如果路由根本不包含斜杠,则认为它是当前控制器的操作 ID,并将以 yii\web\Controller::$uniqueId 为前缀;
  • 如果路由没有前导斜杠,则认为它是相对于当前模块的路由,并将以模块的 uniqueId 为前缀。

从 2.0.2 版本开始,路由也可以指定为别名。在这种情况下,将在进行上述转换步骤之前先将别名转换为实际路由。

protected static string 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() 公共静态方法

返回之前 记住 的 URL。

另请参阅

public static string|null previous ( $name null )
$name string|null

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

返回 string|null

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

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

            
remember() 公共静态方法

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

另请参阅

public static void remember ( $url '', $name null )
$url string|array

要记住的 URL。有关可接受的格式,请参阅 to()。如果未指定此参数,则将使用当前请求的 URL。

$name string|null

与要记住的 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() 公共静态方法

根据给定的参数创建 URL。

此方法与 toRoute() 非常相似。唯一的区别是此方法要求仅以数组形式指定路由。如果给出字符串,则将其视为 URL。特别是,如果 $url

  • 数组:将调用 toRoute() 生成 URL。例如:['site/index']['post/index', 'page' => 2]。有关如何指定路由的更多详细信息,请参阅 toRoute()
  • @ 开头的字符串:将其视为别名,并将返回相应的别名字符串。
  • 空字符串:将返回当前请求的 URL;
  • 普通字符串:将按原样返回。

当指定 $scheme(字符串或 true)时,将返回包含主机信息的绝对 URL(从 yii\web\UrlManager::$hostInfo 获取)。如果 $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 string to ( $url '', $scheme false )
$url array|string

用于生成有效 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() 公共静态方法

为给定的路由创建 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');
public static string toRoute ( $route, $scheme false )
$route string|array

使用字符串表示路由(例如 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);
}