Php Yii2:如何为UrlManager构建正确的分页模式?

Php Yii2:如何为UrlManager构建正确的分页模式?,php,yii2,Php,Yii2,我有以下情况: 1) 预期的请求是/a1、a2、aN[/…/n1、n2、nN][?range=xxx-yyyy[&search=string]] (方括号包含可选零件) 2) 操作方法签名是公共函数actionIndex(字符串$alias='',字符串$range='',字符串$search=''):字符串 3) 所以我用了一个规则: [ 'pattern' => '<alias:[\\w-,\\/]+>', 'route' =>

我有以下情况:

1) 预期的请求是
/a1、a2、aN[/…/n1、n2、nN][?range=xxx-yyyy[&search=string]]
(方括号包含可选零件)

2) 操作方法签名是
公共函数actionIndex(字符串$alias='',字符串$range='',字符串$search=''):字符串

3) 所以我用了一个规则:

[
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
],
并将
别名
页面
参数显示为GET变量

在请求URI末尾添加页码的正确规则是什么
/a1、a2、aN/n1、n2、nN/2如果数字为1,则忽略

UPD:我找到了一个原因,这是我以前定义的规则:

'/shop' => 'shop/products/index', //it breaks following rules
[
    'pattern'      => '<alias:[\\w-,\\/]+>/<page:\d+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
],
[
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
],
'/shop'=>“shop/products/index',//它违反了以下规则
[
“模式”=>“/”,
“路线”=>“商店/产品/索引”,
'encodeParams'=>false,
],
[
'模式'=>'',
“路线”=>“商店/产品/索引”,
'encodeParams'=>false,
],

那么,我该如何使所有这些规则协同工作呢?

解决方案1:创建另一个操作方法,该方法在没有
别名
参数的情况下工作,并使用空参数调用
操作索引

解决方案2:以特殊顺序使用不同的
模式
制定相同的规则:

[
    'name'         => 'This rule is first when we create a link',
    'pattern'      => '<alias:[\\w-,\\/]+>/<page:\d+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::CREATION_ONLY,
],
[
    'name'         => 'This rule is first when we parse a request',
    //
    'pattern'      => 'shop/<page:\d+>',
    'route'        => 'shop/products/index',
],
[
    'name'         => 'Used for parsing when previous rule does not match',
    'pattern'      => '<alias:[\\w-,\\/]+>/<page:\d+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::PARSING_ONLY,
],

[
    'name'         => 'Same as first but when link has no page number',
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::CREATION_ONLY,
],
[
    'name'         => 'First when parsing request with no page number',
    'pattern'      => 'shop',
    'route'        => 'shop/products/index',
],
[
    'name'         => 'Used for parsing when previous rule does not match',
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::PARSING_ONLY,
],
[
'name'=>'此规则是创建链接时的第一条规则',
“模式”=>“/”,
“路线”=>“商店/产品/索引”,
'encodeParams'=>false,
'mode'=>\yii\web\UrlRule::仅创建\u,
],
[
'name'=>'此规则是我们分析请求时的第一条规则',
//
“图案”=>“商店/”,
“路线”=>“商店/产品/索引”,
],
[
“name”=>“用于在上一个规则不匹配时进行分析”,
“模式”=>“/”,
“路线”=>“商店/产品/索引”,
'encodeParams'=>false,
'mode'=>\yii\web\UrlRule::仅解析\u,
],
[
“名称”=>“与第一个相同,但当链接没有页码”时,
'模式'=>'',
“路线”=>“商店/产品/索引”,
'encodeParams'=>false,
'mode'=>\yii\web\UrlRule::仅创建\u,
],
[
分析没有页码的请求时,首先是'name'=>',
“图案”=>“商店”,
“路线”=>“商店/产品/索引”,
],
[
“name”=>“用于在上一个规则不匹配时进行分析”,
'模式'=>'',
“路线”=>“商店/产品/索引”,
'encodeParams'=>false,
'mode'=>\yii\web\UrlRule::仅解析\u,
],
如果你知道一个更好的解决办法,我会很高兴看到它

[
    'name'         => 'This rule is first when we create a link',
    'pattern'      => '<alias:[\\w-,\\/]+>/<page:\d+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::CREATION_ONLY,
],
[
    'name'         => 'This rule is first when we parse a request',
    //
    'pattern'      => 'shop/<page:\d+>',
    'route'        => 'shop/products/index',
],
[
    'name'         => 'Used for parsing when previous rule does not match',
    'pattern'      => '<alias:[\\w-,\\/]+>/<page:\d+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::PARSING_ONLY,
],

[
    'name'         => 'Same as first but when link has no page number',
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::CREATION_ONLY,
],
[
    'name'         => 'First when parsing request with no page number',
    'pattern'      => 'shop',
    'route'        => 'shop/products/index',
],
[
    'name'         => 'Used for parsing when previous rule does not match',
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
    'mode'         => \yii\web\UrlRule::PARSING_ONLY,
],