In the project, it is recommended to use Yii2's built-in URL tool class to generate links, which can very conveniently manage the URL behavior of the entire site: for example, changing the URL format of the entire site by modifying the configuration. For more advanced usage of URLs, please refer to the official documentation. This article only introduces several ways for Yii2 to generate URLs.
Yii2 Default URL link format
Yii2 Default URL link format refers to the format when URL beautification is enabled.
URL format when submodules are not enabled:
// 参数 r 中的 article 表示控制器, view 表示动作 http://www.example.com/index.php?r=article/view&id=100
URL format when submodules are enabled:
// 参数 r 中的 kernel 表示子模块 http://www.example.com/index.php?r=kernel/article/view&id=100
Yii2 built-in URL generation tool
URL manager: urlManager
URL helper class: yii \helpers\Url
Using the built-in URL generation tool, you can beautify the URL of the entire site through configuration without changing the source code
URL Manager
The URL manager is a built-in application component called urlManager. Create URLs in WEB applications and console applications in the following two ways:
\Yii::$app->urlManager->createUrl($params)
\Yii::$app->urlManager->createAbsoluteUrl($params, $schema = null)
createUrl
The method generates a relative path to the root directory, for example: /index.php?r=article/view
createAbsoluteUrl()
The method generates an absolute path, for example: http: //www.example.com/index.php?r=article/view
Common examples of using URL managers to create URLs:
// URL:/index.php?r=article/view \Yii::$app->urlManager->createUrl('article/view'); // URL:/index.php?r=article/view&id=2 \Yii::$app->urlManager->createUrl(['article/view','id'=>2]); // URL: http://www.example.com?r=kernel/article/view echo \Yii::$app->urlManager->createAbsoluteUrl('kernel/article/view');
URL Helper Class
Relative to the URL manager, using the yii\helpers\Url
helper class can greatly simplify the creation of URLs.
1. Assume that the current URL /index.php?r=kernel/article/view&id=10
, the following description of the URL helper class Url::to()
is How it works (not recommended):
// 创建当前 URL // 显示:/?r=kernel/article/view&id=10 echo Url::to(); // 创建当前 URL // 显示:http://www.example.com/?r=kernel/article/view&id=10 echo Url::to('', true); // 字符参数,没啥用 // 显示:kernel/article/view echo Url::to('kernel/article/view'); // 创建路由,数组参数的自动调用 Url::toRoute(...) // 显示:/index.php?r=kernel/article/view echo Url::to(['article/view']);
2. Assume the current URL /index.php?r=kernel/article/view&id=10
, The following explains how the URL helper class Url::toRoute()
method works (recommended):
// 创建当前路由(仅继承参数r的值) // 显示:/index.php?r=kernel/article/view echo Url::toRoute([]); // 相同的模块和控制器,不同的动作(仅继承参数r的值) // 显示:/index.php?r=kernel/article/list echo Url::toRoute('list'); // 相同的模块和控制器,不同的动作(仅继承参数r的值) // 显示:/index.php?r=kernel/article/list&cat=contact echo Url::toRoute(['list','cat'=>10]); // 相同模块,不同控制器和动作(仅继承参数r的值) // 显示:/index.php?r=kernel/product/index echo Url::toRoute('product/index'); // 绝对路由,不管是被哪个模块和控制器调用 // 显示:/index.php?r=product/index echo Url::toRoute('/product/index'); // 控制器动作 `actionListHot` 的 URL 格式(仅继承参数r的值,区分大小写) // 显示:/index.php?r=kernel/article/list-hot echo Url::toRoute('list-hot'); // 从别名中获取 URL // 显示:http://www.baidu.com/ Yii::setAlias('@baidu', 'http://www.baidu.com/'); echo Url::to('@baidu');
3. Assume the current URL /index.php?r=kernel/article/view&id=10
, the following explains how the URL helper class Url::current()
method works (recommended):
// 创建当前 URL(包括路由和参数) // 显示:/?r=kernel/article/view&id=10 echo Url::current(); // 移除参数 id // 显示:/?r=kernel/article/view echo Url::current(['id'=>null]); // 新增参数 cat // 显示:/?r=kernel/article/view&id=10&cat=2 echo Url::current(['cat'=>2]);
Related recommendations:
Summary of how to request url in php
javascript parses url into json format Two methods
Detailed explanation of modifying the root address of url() in Laravel
The above is the detailed content of Yii2 method to generate URL. For more information, please follow other related articles on the PHP Chinese website!