亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

新乡县| 唐河县| 石柱| 额尔古纳市| 晴隆县| 牡丹江市| 徐闻县| 阳东县| 嘉黎县| 安乡县| 荆门市| 嵊州市| 曲阳县| 安化县| 台北市| 遂平县| 施秉县| 朔州市| 浦北县| 通渭县| 连城县| 黄大仙区| 政和县| 攀枝花市| 化德县| 西峡县| 麻城市| 乐山市| 云龙县| 乐东| 阿坝县| 临武县| 汨罗市| 富锦市| 明水县| 格尔木市| 榆林市| 康马县| 汝阳县| 达拉特旗| 江川县|