用戶經過指定的URL範式對後臺進行訪問,URL路由處理類進行處理後,轉發到邏輯處理類,邏輯處理類將請求結果返回給用戶。php
約定一套本身喜歡的,對搜索引擎友好,對用戶友好的URL規則框架
對用戶請求的URL進行解析處理,獲取到用戶請求的類,方法,以及Query參數等,並將請求轉發給邏輯處理類。網站
處理網站的真實業務邏輯。搜索引擎
目前來講,有兩種比較流行的URL格式,一種是普通模式,一種是 pathinfo
模式。code
在 ThinkPHP
框架中,默認的URL格式即爲普通模式,普通模式URL以下:blog
index.php?m=home&c=user&a=login&v=value
其中 m
參數的值爲模塊名稱, c
參數的值爲控制器名稱, a
參數的值爲方法名稱,以後的參數則爲該方法中所要接收的其餘 GET
請求參數索引
在 CodeIgniter
框架中,默認的URL格式爲 pathinfo
模式,以下:路由
index.php/controller/method/prarme1/value1
這塊的意義也已經標註的很明白了,在 method
之後,就是方法接收的 GET
參數了,格式就是 名稱/值
開發
此處咱們選用最簡單的普通單模塊模式進行演示,只爲說明簡單的原理,以下:get
index.php?c=user&a=login&v=value
咱們約定參數 c
爲控制器名稱,參數 a
爲方法名稱,以後的均是 GET
參數
<?php include 'index.class.php'; include 'user.class.php'; // 對用戶請求URL進行處理 $query = $_GET; $controller = isset($query['c']) ? $query['c'] : 'indexController'; $action = isset($query['a']) ? $query['a'] : 'index'; if (class_exists($controller)) { if (method_exists($controller, $action)) { unset($_GET['c']); unset($_GET['a']); // 實例化用戶請求類並調用方法 (new $controller())->$action(); } else { echo '控制器' . $controller . '中不存在方法' . $action; } } else { echo '不存在控制器' . $controller; }
其中 unset()
掉兩個get參數,只是爲了對真正調用的方法形成其餘影響。
邏輯處理類就是最終的業務邏輯,也就是真正的迴應用戶請求的代碼片斷。下面只是一個簡單的示例:
/* index.class.php 文件源碼 */ <?php class indexController { public function index(){ var_dump($_GET); } }
/* user.class.php 文件源碼 */ <?php class user { public function index() { echo '這裏是User控制器'; } public function login() { var_dump($_GET); } }
這裏只是最簡單的PHP路由技術的原理,其實真正爲一個項目或者框架進行路由開發,可能須要可以兼容不少複雜的狀況,須要對各類狀況都要考慮到。
原文做者:我纔是二亮
原文連接:http://www.2liang.me/?p=230轉載必須在正文中標註並保留原文連接、做者等信息。