djidji/yii2-default-url-rule

解析和创建带有美化参数的URL,而不是以查询字符串格式

安装: 31

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 0

开放问题: 0

类型:yii2-extension

v1.0.0 2020-04-30 14:19 UTC

This package is auto-updated.

Last update: 2024-09-29 05:29:08 UTC


README

解析和创建带有美化参数的URL,而不是以查询字符串格式。URL的路由和参数段由UrlManager->routeParam分隔

约定

  1. 如果参数名称被声明为动作方法参数,则参数将被美化,否则它将保留在查询字符串格式中;

  2. 参数按照与对应动作方法参数声明的顺序排序;

  3. 如果显式传递了所有-nth参数,则可选参数nth仅绑定到其对应的动作方法参数。如果-nth参数未显式传递,则将其插入到创建的URL中的相应位置;

  4. 参数少于所需或多于动作方法参数将显示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方法期望一个参数而不是两个。