CodeIgniter 框架最显著的特征就是 MVC 模式,它的做法就是提取 url 中的\'分段\', 映射到某个类的某个方法,从而由该方法来输出最终显示的页面内容。那么我们第一课中就是实现一个这样的原型框架。
1. 新建 index.php 文件
2. 提取 uri
1 /** 2 * -------------------------------------------------------------------- 3 * 获取 uri ,并通过 uri 调用相应的方法 4 * -------------------------------------------------------------------- 5 */ 6 7 function detect_uri() { 8 9 if ( ! isset($_SERVER[\'REQUEST_URI\']) OR ! isset($_SERVER[\'SCRIPT_NAME\'])) { 10 return \'\'; 11 } 12 13 $uri = $_SERVER[\'REQUEST_URI\']; 14 if (strpos($uri, $_SERVER[\'SCRIPT_NAME\']) === 0) { 15 $uri = substr($uri, strlen($_SERVER[\'SCRIPT_NAME\'])); 16 } 17 18 if ($uri == \'/\' || empty($uri)) { 19 return \'/\'; 20 } 21 22 $uri = parse_url($uri, PHP_URL_PATH); 23 24 // 将路径中的 \'//\' 或 \'../\' 等进行清理 25 return str_replace(array(\'//\', \'../\'), \'/\', trim($uri, \'/\')); 26 } 27 28 $uri = detect_uri(); 29 echo $uri;
3. 提取 uri 中的分段信息
1 function explode_uri($uri) { 2 3 foreach (explode(\'/\', preg_replace("|/*(.+?)/*$|", "\\1", $uri)) as $val) { 4 $val = trim($val); 5 if ($val != \'\') { 6 $segments[] = $val; 7 } 8 } 9 10 return $segments; 11 } 12 13 $uri_segments = explode_uri($uri); 14 print_r($uri_segments);
4. 根据分段信息,调用相应类的方法
1 // 调用类和方法 2 $CI = new $class(); 3 4 $CI->$method();
整个代码最终就完成了,为了测试效果,紧接着以上代码,写一个 包含 hello 方法的 Welcome 类,并输出 My first Php Framework!
测试代码如下:
class Welcome { function hello() { echo \'My first Php Framework!\'; } }
现在,在浏览器中输入 http://localhost/learn-ci/index.php/welcome/hello
就可以看到页面中显示(注意先去掉代码中的上面两个函数下面的 echo 和 print_r 调试语句 )
My first Php Framework!