URL管理元件主要提供2個功能:
1、根據使用者輸入的url,解析出處理這個請求的路由-由哪個Controller的哪個Action來處理,同時將url中的參數部分加入$_GET參數中。在每個web框架中都需要一個這樣的元件來進行路由分發的工作。
2、根據路由和參數數組建立出url。在視圖層可以對url進行硬編碼,即直接寫死url位址,但這往往缺乏彈性,為後期的維護帶來成本。
array( 'components'=>array( 'urlFormat'=>'path', 'rules'=>array( '/art/<cate:\w+>/<key:\d+>/<id:\d+>/<p:\d+>'=>'article/<cate>/<key>', 'post/<id:\d+>/<title:.*?>'=>'post/view', '<controller:\w+>/'=>'<controller>/', ), ), );</action></controller></action:\w+></controller:\w+></title:.*?></id:\d+></key></cate></p:\d+></id:\d+></key:\d+></cate:\w+>
如上是一個url管理元件的配置,一共有3條規則。下圖以第一條規則為例,說明了url解析和url所建立的兩個功能。對於每個路由規則,CUrlManager都會建立一個CUrlRule物件來處理這條規則對應的這個兩個功能,所以說有幾條規則就會有幾個CUrlRule物件。所以CUrlRule才是url管理的核心所在,接下來分析CUrlRule的工作原理。
每條url路由規則由一個CUrlRule物件來進行處理,接下來以如下路由規則為例:'/art////'=>'article//',說明url解析和url創建的處理過程。每個CUrlRule物件處理url的過程可以分為3個階段:
1、 初始化CUrlRule物件
在CUrlRule物件的建構子中,會初始化6個重要的成員變數:
2、解析url
url的工作分3步走:a、根據pattern規則,解析出url中的各個字段;b、根據references對路由中的引用字段進行替換;c、將params中指定的字段添加到$_GET數組中
3. 建立url
建立url的工作分3步驟:a、根據routePattern規則,解析出輸入的路由中各個字段;b、將輸入的參數數組和上一步解析的數組進行合併;c、用合併後的數組對template進行替換。
以上就是Yii框架分析(八)-URL管理元件的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!