文档章节

一步一步重写 CodeIgniter 框架 (1) —— url 如何映射到具体的方法

Yomut
 Yomut
发布于 2016/07/15 17:09
字数 471
阅读 9
收藏 0

 

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!

本文转载自:http://www.cnblogs.com/zhenyu-whu/p/3159856.html

共有 人打赏支持
Yomut
粉丝 19
博文 191
码字总数 167789
作品 0
厦门
后端工程师
私信 提问
使用 CodeIgniter 创建 Facebook 应用程序

本文向您演示了如何让 Facebook 示例应用程序与 PHP 框架 - CodeIgniter 共同工作。虽然有许多有关 Facebook 开发的好文章,当然,也有一些有关使用 CodeIgniter 来构建应用程序的好文章,但...

IBMdW
2011/07/12
1K
0
CodeIgniter框架环境配置

之前连续搭了好几个项目,觉得用CodeIgniter框架搭建项目已经非常熟悉了。今天想再单独弄一个环境,用作PHP技术的学习和实践平台,却发现之前“熟记”的过程都快放的差不多了,怎么都安装不成...

Claire_level
2012/05/14
0
0
CodeIgniter 框架分析

入口文件 入口文件主要完成下列工作: 1) 指定 CodeIgniter 框架所在目录; 2) 定义 APPPATH 常量,指示应用程序文件根目录; 3) 载入 codeigniter/CodeIgniter.php 文件,启动框架。 codeig...

那些年我们一起
2012/08/10
0
17
CodeIgniter 2.2.6/3.0.3 发布,PHP 的 MVC 框架

CodeIgniter 2.2.6 发布,此版本是安全更新版本: Fixed an XSS attack vector in Security Library method xss_clean(). Changed Config Library method base_url() to fallback to ``$_SER......

oschina
2015/11/02
1K
9
CodeIgniter + uploadify 在 IE 下会话丢失问题的解决方案

最近需要学习并用CodeIgniter框架对一个项目进行二次开发,由于之前一直都是使用Symfony做项目,所以再换到CodeIgniter项目上还是比较顺畅的。不过相比较之下,感觉CodeIgniter比Symfony要轻...

random123
2014/06/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

取变量的地址赋值给另一个变量,C通过,C++编译出错

取变量的地址赋值给另一个变量,C通过。正常运行,C++编译出错。 代码如下: #include <stdio.h>int main(int argc, char *argv[]){int x = 3;int *p = &x;int y = p;/*c ...

SamXIAO
59分钟前
1
0
利用隐写术实施攻击

尽管隐写术是一种低频攻击途径,但网络犯罪分子已经开始利用它结合社交媒体的普遍性和快速传播性来传递恶意有效负载。 低调但有效的隐写技术虽然是旧把戏,但将代码隐藏在看似正常的图像中,...

Linux就该这么学
59分钟前
3
0
YII2的乐观锁和悲观锁

乐观锁与悲观锁¶ Web应用往往面临多用户环境,这种情况下的并发写入控制, 几乎成为每个开发人员都必须掌握的一项技能。 在并发环境下,有可能会出现脏读(Dirty Read)、不可重复读(Unrep...

echojson
今天
2
0
UCOS线程切换原理

黑客画家
今天
3
0
最牛Java架构师进阶路线(年薪80W)

1、源码分析专题 详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美、提高核心竞争力。 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。知其然,并知其...

别打我会飞
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部