中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-19 08:04:02 來源:網絡 閱讀:1535 作者:tywali 欄目:開發技術

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)
{
   
$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)

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

 

修改后的代碼:

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 保亭| 响水县| 沈阳市| 梁山县| 长武县| 彩票| 乃东县| 祁连县| 九寨沟县| 邻水| 隆化县| 织金县| 广水市| 新建县| 娱乐| 福州市| 新绛县| 麻城市| 翁牛特旗| 邢台市| 平原县| 威海市| 宜君县| 鹤壁市| 雷州市| 沾益县| 曲沃县| 响水县| 奉贤区| 双辽市| 蒙阴县| 江源县| 平谷区| 房产| 仁化县| 宁津县| 巴彦县| 股票| 武宣县| 邹城市|