不得不说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