91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

库车县| 榆社县| 台北市| 永新县| 凤山县| 宝鸡市| 青川县| 深圳市| 石城县| 宝兴县| 浏阳市| 湄潭县| 石泉县| 二连浩特市| 锦州市| 屯留县| 临清市| 浪卡子县| 河间市| 岳池县| 闵行区| 丹东市| 龙海市| 如皋市| 肇州县| 旅游| 井陉县| 塔城市| 平遥县| 沾益县| 南昌县| 南和县| 靖远县| 资阳市| 吉林市| 大渡口区| 德阳市| 西青区| 张北县| 溧阳市| 会理县|