日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YII2 - Yii 2 控制器不能包含大写字母的Bug

發(fā)布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YII2 - Yii 2 控制器不能包含大写字母的Bug 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Yii1里,URL路由參數(shù)中的控制器名稱是可以有大寫字母的(首字母除外),但是到了Yii2的時候(我的版本是2.0.8,其它版本未確認(rèn)),卻是不支持控制器名稱中包含大寫字母了,我查了下官方文檔,其對于控制器命名的規(guī)則如下:

?

控制器ID遵循以下規(guī)則衍生控制器類名:

  • 將用正斜杠區(qū)分的每個單詞第一個字母轉(zhuǎn)為大寫。注意如果控制器ID包含正斜杠,只將最后的正斜杠后的部分第一個字母轉(zhuǎn)為大寫;
  • 去掉中橫杠,將正斜杠替換為反斜杠;
  • 增加Controller后綴;
  • 在前面增加yii\base\Application::controllerNamespace控制器命名空間.

下面為一些示例,假設(shè)yii\base\Application::controllerNamespace控制器命名空間為?app\controllers:

  • article?對應(yīng)?app\controllers\ArticleController;
  • post-comment?對應(yīng)?app\controllers\PostCommentController;
  • admin/post-comment?對應(yīng)?app\controllers\admin\PostCommentController;
  • adminPanels/post-comment?對應(yīng)?app\controllers\adminPanels\PostCommentController.

首先,它沒有說控制器是否可以用大寫字母,其次,從它的命名規(guī)則中推測,Yii2的作者也許是想用“-”來區(qū)分不同的單詞,這樣方便輸入URL(不用按Shift+字母輸入大寫字母了)。

?

想要把Yii 2改為支持控制器名稱包含大寫字母也很容易,找到module.php,在createControllerByID()函數(shù)里,

public function?createControllerByID($id)?
{?
????
$pos?= strrpos($id,?'/')
;?
????if?
($pos?===?false
) {?
????????
$prefix?=?''
;?
????????
$className?=?$id
;?
????
}?else?
{?
????????
$prefix?= substr($id,?0,?$pos?+?1)
;?
????????
$className?= substr($id,?$pos?+?1)
;?
????
}?

????
//?
這是修改前的代碼?
????/*if (!preg_match('%^[a-z][a-z0-9\\-_]*$%', $className)) {?
????????return null;?
????}*/?
????//?
這是修改后的代碼?
????
if?(!preg_match('%^[a-z][\w0-9\\-_]*$%',?$className)) {?
????????
return null
;?
????
}?

?

修改前的代碼:

preg_match('%^[a-z][a-z0-9\\-_]*$%', $className)

其含義是查找以小寫字母開頭,由小寫字母、數(shù)字和“-”符號組成的控制器名稱。

?

修改后的代碼:

preg_match('%^[a-z][\w0-9\\-_]*$%', $className)

其含義是查找以小寫字母開頭,由任意字母、數(shù)字和“-”符號組成的控制器名稱。






本文轉(zhuǎn)自 tywali 51CTO博客,原文鏈接:http://blog.51cto.com/lancelot/1784325,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的YII2 - Yii 2 控制器不能包含大写字母的Bug的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。