djidji / yii2-default-url-rule
解析和创建带有美化参数的URL,而不是以查询字符串格式
Requires
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-09-29 05:29:08 UTC
README
解析和创建带有美化参数的URL,而不是以查询字符串格式。URL的路由和参数段由UrlManager->routeParam分隔
约定
-
如果参数名称被声明为动作方法参数,则参数将被美化,否则它将保留在查询字符串格式中;
-
参数按照与对应动作方法参数声明的顺序排序;
-
如果显式传递了所有-nth参数,则可选参数nth仅绑定到其对应的动作方法参数。如果-nth参数未显式传递,则将其插入到创建的URL中的相应位置;
-
参数少于所需或多于动作方法参数将显示404
安装
通过composer
安装此扩展是首选方法。
运行以下命令:
php composer.phar require --prefer-dist djidji/yii2-default-url-rule "*"
或者将以下内容添加到你的composer.json
文件的require部分:
"djidji/yii2-default-url-rule": "*"
使用
安装扩展后,只需在Urlmanager的规则中声明即可在代码中使用它。
'rules' => [
// ...other url rules...
[
'class' => 'djidji\DefaultUrlRule',
// complete file path to save routes.
'routesFile' => '@app/config/routes.php'
],
]
示例
class PostController extends Controller
{
public function actionIndex($category,$year=2015,$tag='')
{
}
public function actionView($id)
{
}
}
创建URL
-
Url::to(['post/index', 'year' => 2014, 'category' => 'php'])
创建/index.php/post/index/r/php/2014
; -
Url::to(['post/index', 'category' => 'php'])
创建/index.php/post/index/r/php
; -
Url::to(['post/index', 'category' => 'php','tag'=>'programming'])
创建/index.php/post/index/r/php/2015/programming
. 参数'year'的默认值将插入到其位置; -
Url::to(['post/index','year' => 2014])
结果为false
,因为未传递必需的$category
参数; -
Url::to(['post/view', 'id' => 100])
创建/index.php/post/view/r/100
; -
Url::to(['post/view', 'id' => 100, 'source' => 'ad'])
创建/index.php/post/view/r/100?source=ad
. 因为"source"参数未声明为动作View方法,所以它作为查询参数附加到创建的URL中。
解析URL
-
/index.php/post/index
结果为false
,因为actionIndex有需要传递参数的必需的第一个参数。 -
/index.php/post/index/r/php
解析为['post/index', ['category' => 'php']]
; -
/index.php/post/index/r/php/2015/programming
解析为['post/index', ['category' => 'php','tag'=>'programming','year'=>2015]]
; -
/index.php/post/index/r/php/programming
解析为['post/index', ['category' => 'php','year'=>'programming']]
; -
/index.php/post/view/r/100?source=ad
解析为['post/view', ['id' => 100]]
; -
/index.php/post/view/r/100/ad?source=ad
结果为false
,因为actionView方法期望一个参数而不是两个。