Yii2 路由美化访问需要加s

不得不说yii真是反人类,怪不得现在都不维护了,今天解析下路由美化下的路由访问问题。

设置main.php配置文件

'urlManager' => [
            'enablePrettyUrl' => true,  // 启用 URL美化
            'showScriptName' => false,  // 隐藏入口文件index.php
            'enableStrictParsing' => true, // 是否开启严格解析,该选项仅在开启美化功能后生效
            'rules' => require(__DIR__ . '/url-rules.php'),
        ],

设置路由文件url-rules.php

[
    [
        'class' => 'yii\rest\UrlRule',
        'controller' => ['scm/user'],
        'extraPatterns' => [
            'POST login' => 'login',
            'POST register' => 'register',
            'GET check-status' => 'check-status',
           
        ]
    ],
    [
        'class' => 'yii\rest\UrlRule',
        'controller' => ['scm/supplier-goods'],
        'extraPatterns' => [
            'GET list' => 'index',
            'GET goods' => 'goods',
        ]
    ]
]

如上图,如果开启了路由美化,那么控制器的路由后缀必须是负数形式,也就是必须是s结束,如果直接访问scm/user会直接找不到

 我们也可以不启用复数形式只需要在路由里添加 

'class' => 'yii\rest\UrlRule',
        'controller' => ['scm/user'],
        'pluralize' => false, //关闭复数形式
        'extraPatterns' => [
            'POST login' => 'login',
            'POST register' => 'register',
        ]
]

官方文档:

UrlRule, yii\rest\UrlRule | API Documentation for Yii 2.0 | Yii PHP Framework

--------------------------------6月12补充内容------------------------------------

其复数形式的正则转换规则,与英文复数规则基本一致

单词 "Category" 的复数形式是 "Categories"。在英语中,许多以 "y" 结尾的单词在变为复数时会改变为 "ies",但当 "y" 前面是元音时,通常只需加 "s"。由于 "Category" 中的 "y" 前面是辅音 "g",所以它的复数形式是 "Categories"。

/**
   * Pluralization rules.
   */
  [
    [/s?$/i, 's'],
    [/([^aeiou]ese)$/i, '$1'],
    [/(ax|test)is$/i, '$1es'],
    [/(alias|[^aou]us|tlas|gas|ris)$/i, '$1es'],
    [/(e[mn]u)s?$/i, '$1s'],
    [/([^l]ias|[aeiou]las|[emjzr]as|[iu]am)$/i, '$1'],
    [/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],
    [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],
    [/(seraph|cherub)(?:im)?$/i, '$1im'],
    [/(her|at|gr)o$/i, '$1oes'],
    [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],
    [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],
    [/sis$/i, 'ses'],
    [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],
    [/([^aeiouy]|qu)y$/i, '$1ies'],
    [/([^ch][ieo][ln])ey$/i, '$1ies'],
    [/(x|ch|ss|sh|zz)$/i, '$1es'],
    [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],
    [/(m|l)(?:ice|ouse)$/i, '$1ice'],
    [/(pe)(?:rson|ople)$/i, '$1ople'],
    [/(child)(?:ren)?$/i, '$1ren'],
    [/eaux$/i, '$0'],
    [/m[ae]n$/i, 'men'],
    ['thou', 'you']
  ].forEach(function (rule) {
    return pluralize.addPluralRule(rule[0], rule[1]);
  });

找到以y结尾的这个复数正则

/([^aeiouy]|qu)y$/i

由此看出当y前面不是aeiouy字母的时候或者是qu的时候都会变成ies

https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值