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

什么

我有以下条件:

1)预期请求是/a1,a2,aN[/.../n1,n2,nN][?range=xxx-yyyy[&search=string]](方括号包含可选部分)

2)动作方法签名是 public function actionIndex(string $alias = '', string $range = '', string $search = ''): string

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

[
    'pattern'      => '<alias:[\\w-,\\/]+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
],

它工作正常,直到我尝试添加分页,LinkPager忽略我写的规则:

[
    'pattern'      => '<alias:[\\w-,\\/]+>/<page:\d+>',
    'route'        => 'shop/products/index',
    'encodeParams' => false,
],

并将aliaspageparams显示为 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,
],

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

什么

解决方案1:制作另一种无需alias参数即可工作并actionIndex以空方法调用的动作方法

解决方案2:以mode特殊顺序制定不同的相同规则

[
    '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,
],

如果你知道一个更好的解决方案,我会很高兴看到它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Yii2中配置urlManager规则

来自分类Dev

Yii2的urlManager规则,用于&& =

来自分类Dev

其余yii2漂亮的url urlManager

来自分类Dev

yii urlmanager参数故障

来自分类Dev

yii2 urlManager enablePrettyUrl无法正常工作

来自分类Dev

yii2 urlManager enablePrettyUrl无法正常工作

来自分类Dev

如何使用别名和$ _GET参数配置yii2 urlManager规则

来自分类Dev

如何在yii2中的多语言网站上设置urlmanager规则?

来自分类Dev

urlManager配置中的Yii 2规范URL

来自分类Dev

如何创建此urlManager规则?

来自分类Dev

Yii 1:UrlManager在模块控制器中未调用正确的操作

来自分类Dev

如何建立正确的SPARQL查询

来自分类Dev

Yii url使用urlManager重写url吗?

来自分类Dev

urlManager在Yii 2.0中不起作用

来自分类Dev

Yii UrlManager和多个Get参数

来自分类Dev

Yii UrlManager动作或控制器

来自分类Dev

createURL和urlManager之间的Yii关系

来自分类Dev

在yii2 rest urlmanager中包含所有控制器的最佳方法

来自分类Dev

urlManager规则不适用于模块Yii2

来自分类Dev

urlManager规则不适用于模块Yii2

来自分类Dev

Not Found 在 Yii2 中使用 urlManager 手动添加了新页面?

来自分类Dev

Yii2 使用 UrlManager::createUrl() 将语言添加到 URL

来自分类Dev

在Yii 2的UrlManager规则集中使用RegEx

来自分类Dev

在Yii 2的UrlManager规则集中使用RegEx

来自分类Dev

如何在Yii中的urlManager规则内处理GET参数?

来自分类Dev

如何在Yii中为虚拟目录启用urlManager?

来自分类Dev

YII urlManager用多个参数重写单一URL

来自分类Dev

Yii urlManager-动态控制器名称

来自分类Dev

在Yii.urlManager中的网址中附加“ admin /”前缀