YII2 - Yii 2 控制器不能包含大写字母的Bug
在Yii1里,URL路由參數中的控制器名稱是可以有大寫字母的(首字母除外),但是到了Yii2的時候(我的版本是2.0.8,其它版本未確認),卻是不支持控制器名稱中包含大寫字母了,我查了下官方文檔,其對于控制器命名的規則如下:
?
控制器ID遵循以下規則衍生控制器類名:
- 將用正斜杠區分的每個單詞第一個字母轉為大寫。注意如果控制器ID包含正斜杠,只將最后的正斜杠后的部分第一個字母轉為大寫;
- 去掉中橫杠,將正斜杠替換為反斜杠;
- 增加Controller后綴;
- 在前面增加yii\base\Application::controllerNamespace控制器命名空間.
下面為一些示例,假設yii\base\Application::controllerNamespace控制器命名空間為?app\controllers:
- article?對應?app\controllers\ArticleController;
- post-comment?對應?app\controllers\PostCommentController;
- admin/post-comment?對應?app\controllers\admin\PostCommentController;
- adminPanels/post-comment?對應?app\controllers\adminPanels\PostCommentController.
首先,它沒有說控制器是否可以用大寫字母,其次,從它的命名規則中推測,Yii2的作者也許是想用“-”來區分不同的單詞,這樣方便輸入URL(不用按Shift+字母輸入大寫字母了)。
?
想要把Yii 2改為支持控制器名稱包含大寫字母也很容易,找到module.php,在createControllerByID()函數里,
| public function?createControllerByID($id)? |
?
修改前的代碼:
preg_match('%^[a-z][a-z0-9\\-_]*$%', $className)
其含義是查找以小寫字母開頭,由小寫字母、數字和“-”符號組成的控制器名稱。
?
修改后的代碼:
preg_match('%^[a-z][\w0-9\\-_]*$%', $className)
其含義是查找以小寫字母開頭,由任意字母、數字和“-”符號組成的控制器名稱。
本文轉自 tywali 51CTO博客,原文鏈接:http://blog.51cto.com/lancelot/1784325,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的YII2 - Yii 2 控制器不能包含大写字母的Bug的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Powershell查看AD 组成员的变
- 下一篇: 【RedHat、CentOS Cacti