6.1 KiB
Url Helper
Url 助手提供了一组静态方法来管理 URLs。
Getting Common URLs
这有两种方法你可以获得公共 URLs:home URL 和当前请求的 base URL 。按如下方法可以获得 home URL :
$relativeHomeUrl = Url::home();
$absoluteHomeUrl = Url::home(true);
$httpsAbsoluteHomeUrl = Url::home('https');
如果没有参数传递,生成的 URL 是相对路径。你即可以通过 true 获取当前 URL 的
schema 也可以指定用 (https, http) 中的哪个。
To get base URL of the current request use the following:
$relativeBaseUrl = Url::base();
$absoluteBaseUrl = Url::base(true);
$httpsAbsoluteBaseUrl = Url::base('https');
The only parameter of the method works exactly the same as for Url::home().
Creating URLs
In order to create URL to a given route use Url::toRoute() method. 此方法使用 \yii\web\UrlManager 来创建
一个 URL:
$url = Url::toRoute(['product/view', 'id' => 42]);
You may specify the route as a string, e.g., site/index. You may also use an array if you want to specify additional
query parameters for the URL being created. 数组的格式必须按如下方式:
// 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']
A route may be either absolute or relative. An absolute route has a leading slash (e.g. /site/index), while a relative
route has none (e.g. site/index or index). A relative route will be converted into an absolute one by the following rules:
- If the route is an empty string, the current \yii\web\Controller::route will be used;
- If the route contains no slashes at all (e.g.
index), it is considered to be an action ID of the current controller and will be prepended with \yii\web\Controller::uniqueId; - If the route has no leading slash (e.g.
site/index), it is considered to be a route relative to the current module and will be prepended with the module's \yii\base\Module::uniqueId.
从版本 2.0.2 开始,you may specify a route in terms of an alias. 如果是这种情况, the alias will first be converted into the actual route which will then be turned into an absolute route according to the above rules.
下面是一些使用该方法的例子:
// /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 assume the alias "@postEdit" is defined as "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() 方法非常相似。The only difference is that this method
requires a route to be specified as an array only. 如果给出一个字符串,将被视为一个 URL。
第一个参数可能是:
- an array: toRoute() will be called to generate the URL. For example:
['site/index'],['post/index', 'page' => 2]. Please refer to toRoute() for more details on how to specify a route. - a string with a leading
@: it is treated as an alias, and the corresponding aliased string will be returned. - an empty string: the currently requested URL will be returned;
- a normal string: it will be returned as is.
When $scheme is specified (either a string or true), an absolute URL with host info (obtained from
\yii\web\UrlManager::hostInfo) will be returned. If $url is already an absolute URL, its scheme
will be replaced with the specified one.
下面是一些用法的示例:
// /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 assume the alias "@postEdit" is defined as "post/edit"
echo Url::to(['@postEdit', 'id' => 100]);
// 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');
// 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 开始,you may use yii\helpers\Url::current() to create a URL based on the currently
requested route and GET parameters. You may modify or remove some of the GET parameters or add new ones by
passing a $params parameter to the method. 例如,
// assume $_GET = ['id' => 123, 'src' => 'google'], current route is "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]);
Remember URLs
There are cases when you need to remember URL and afterwards use it during processing of the one of sequential requests. 它可以通过以下方式来实现:
// Remember current URL
Url::remember();
// Remember URL specified. See Url::to() for argument format.
Url::remember(['product/view', 'id' => 42]);
// Remember URL specified with a name given
Url::remember(['product/view', 'id' => 42], 'product');
In the next request we can get URL remembered in the following way:
$url = Url::previous();
$productUrl = Url::previous('product');
检查相对 URLs
To find out if URL is relative i.e. it doesn't have host info part, 你可以使用如下代码:
$isRelative = Url::isRelative('test/it');