CakePHP中Router的機制跟使用方法

來源:互聯網
上載者:User
CakePHP中Router的機制和使用方法

一、典型CakePHP處理 Request 的流程


?? ? ?當人瀏覽網站,發出請求,.htaccess檔案將request映射到webroot/index.php檔案,此檔案中主要處理:1.常量的定義;2.包含bootstrap.php檔案;3.調用 dispather() 函數。

?

二、認識 Router 與 Dispatcher、Controller 之間的關係

?? ? ?(1). 路由(Router)從URL中解釋並提取出這次請求的參數:控制器(controller)、動作(action)以及其他在這次請求中關聯影響到得商務邏輯的所有其他參數資訊;

?? ? ?(2).使用路由後,請求的URL被映射到一個控制器的動作中(在特定的一個控制器類得一個方法)


?? **** 部分函數解析 ****

?? 1. Router::parse($url)

?? ? ? 根據提供的url,解析出對應的controller、action、params 的數組。所依據的準則:預設路由、新定義建立的路由規則。

?

?

?? 2. Router::getArgs($args, $options = array()) 將passed params 轉換為參數

?

三、CakePHP 中Router 配置

?? ? CakePHP 源碼包中 router.php 檔案:



??自訂路由:

connect() 函數的三個參數:1. 你希望匹配的URL值;2. 自訂的路由元素的預設值;3. 協助該路由器匹配的URL元素的正則規則。

基本格式用於Router定義:

?

Router::connect(    'URL',    array('paramName' => 'defaultValue'),    array('paramName' => 'matchingRegex'));

?

?

??註:

(1) 定義URL類型。URL通常由斜杠分割的,但是也會包含一些萬用字元(*)或者自訂路由元素(URL元素以冒號為首碼),用萬用字元來匹配URL的類型。特殊化的路由元素允許你為你的控制器actions收集參數。

(2) 當請求出現時,這些路由元素的值會在控制器的 $this->params 存在。這不同於具名引數 (named parameter),所以注意區別:具名引數 (/controller/action/name:value) 存在於 $this->passedArgs 中,而自訂路由元素存在於 $this->params

?(3) 預設路由:/:controller、 /:controller/:action/*

?

?? ?這樣的配置會返回什麼呢???

?? ?寫兩個例子看一下:


?

四、 CakePHP 中Router 的應用

??(1). 簡單應用:


??(2). 進階應用程式:




?? ? ?SlugRoute的解析方法很簡單。首先我們調用父類parse()函數,可得到解析Regex的路徑。任何空的或false的返回都會導致我們解析路徑失敗(路徑不匹配),只有當我們得到有效路徑(對於post帶有匹配的參數).自從CakeRoute:parse()將已經創造了參數,所以我們不需要修改參數,就返回他們如果沒有目標存在或返回錯誤。

?? ? ?在app/config/routes.php引用此router類:

?

五、 CakePHP 中Router 設定檔的弊端

?? ? ? CakePHP的預設實現中,我們並不用去設定Route,系統會遵循/controller/action/param的形式去解析URL。但是很多時候這樣的URL並不友好,於是我們就要設定自訂的Route,其結果就是Route設定檔不斷膨脹。值得注意的是PHP對於每個請求都要重建運行環境,而對於一次請求而言,Route設定檔裡最後使用的只是一條配置而已,為了這一條配置,卻不得不重複解析整個龐大的Route設定檔,無疑是個巨大的負擔。

?? ? ? REST風格是解決這個問題的好辦法,採用REST風格的架構方式,資源的URL形式相對確定,操作方式由HTTP方法而定,因此Route設定檔會迅速瘦身。



?? ? ??REST軟體架構是一個抽象的概念,是一種為了實現這一互連網的超媒體分布式系統的行動指南。利用任何的技術都可以實現這種理念。而實現這一軟體架構最著名的就是HTTP協議。通常我們把REST也寫作為REST/HTTP,在實際中往往把REST理解為基於HTTP的REST軟體架構,或者更進一步把REST和HTTP看作為等同的概念。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.