Url 助手提供了一组用于管理 URL 的静态方法。
您可以使用两种方法获取常用 URL:首页 URL 和当前请求的基 URL。要获取首页 URL,请使用以下方法
$relativeHomeUrl = Url::home();
$absoluteHomeUrl = Url::home(true);
$httpsAbsoluteHomeUrl = Url::home('https');
如果未传递参数,则生成的 URL 为相对 URL。您可以传递 true
以获取当前方案的绝对 URL,或者显式指定方案(https
、http
)。
要获取当前请求的基 URL,请使用以下方法
$relativeBaseUrl = Url::base();
$absoluteBaseUrl = Url::base(true);
$httpsAbsoluteBaseUrl = Url::base('https');
该方法的唯一参数与 Url::home()
的参数完全相同。
要创建指向给定路由的 URL,请使用 Url::toRoute()
方法。该方法使用 yii\web\UrlManager 创建 URL
$url = Url::toRoute(['product/view', 'id' => 42]);
您可以将路由指定为字符串,例如 site/index
。如果您想为要创建的 URL 指定其他查询参数,也可以使用数组。数组格式必须为
// generates: /index.php?r=site%2Findex¶m1=value1¶m2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']
如果您想创建带有锚点的 URL,可以使用带有 #
参数的数组格式。例如:
// generates: /index.php?r=site%2Findex¶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']);
// /index.php?r=post%2Fedit&id=100 assume the alias "@postEdit" is defined as "post/edit"
echo Url::toRoute(['@postEdit', 'id' => 100]);
// 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');
还有一个方法Url::to()
,它与toRoute()非常类似。唯一的区别是,此方法需要将路由指定为数组。如果提供字符串,则将被视为 URL。
第一个参数可以是
['site/index']
,['post/index', 'page' => 2]
。有关如何指定路由的更多详细信息,请参阅toRoute()。@
开头的字符串:它被视为别名,并将返回相应的别名字符串。当指定$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%2Fedit&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');
// 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');
从版本 2.0.3 开始,您可以使用yii\helpers\Url::current()根据当前请求的路由和 GET 参数创建 URL。您可以通过将$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]);
在某些情况下,您需要记住 URL,然后在处理一系列请求中的其中一个请求时使用它。可以通过以下方式实现
// 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');
在下一个请求中,我们可以通过以下方式获取记住的 URL
$url = Url::previous();
$productUrl = Url::previous('product');
要确定 URL 是否为相对 URL(即它没有主机信息部分),您可以使用以下代码
$isRelative = Url::isRelative('test/it');
发现错别字或您认为此页面需要改进?
在 github 上编辑它 !
此条件应检查它是否是主页
if ( Url::toRoute( Url::home() ) == Url::toRoute( Yii::$app->controller->getRoute() ) ) { // it is Home page }
注册 或 登录 才能评论。