类 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。
公共方法
方法 | 描述 | 定义于 |
---|---|---|
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 |
属性详情
用于创建 URL 的 URL 管理器
方法详情
返回当前请求的基本 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;
}
返回当前请求页面的规范 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);
}
使用当前路由和 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 方案
|
返回 | 字符串 |
生成的 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);
}
通过确保使用指定的方案来规范化 URL。
如果 URL 是相对的或方案不是字符串,则跳过规范化。
public static string 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();
}
返回主页 URL。
public static string 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;
}
返回一个值,指示 URL 是否为相对 URL。
相对 URL 没有主机信息部分。
public static boolean isRelative ( $url ) | ||
$url | 字符串 |
要检查的 URL |
返回 | 布尔值 |
URL 是否为相对 URL |
---|
public static function isRelative($url)
{
return preg_match('~^[[:alpha:]][[:alnum:]+-.]*://|^//~', $url) === 0;
}
规范化路由并使其适合 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, '/');
}
public static string|null previous ( $name = null ) | ||
$name | string|null |
与之前记住的 URL 关联的名称。如果未设置,则将使用 yii\web\User::getReturnUrl() 获取记住的 URL。 |
返回 | string|null |
之前记住的 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 | 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);
}
}
根据给定的参数创建 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 方案
|
返回 | 字符串 |
生成的 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);
}
为给定的路由创建 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');
public static string toRoute ( $route, $scheme = false ) | ||
$route | string|array |
使用字符串表示路由(例如 |
$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);
}
注册 或 登录 以发表评论。