1. 云栖社区>
  2. PHP教程>
  3. 正文

一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能

作者:用户 来源:互联网 时间:2017-12-01 16:18:23

框架实现路由codeigniter简单重写功能

一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能 - 摘要: 本文讲的是一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能, 在上一课中,我们实现了简单的根据 URI 执行某个类的某个方法。但是这种映射没有扩展性,对于一个成熟易用的框架肯定是行不通的。那么,我们可以让 框架的用户 通过自定义这种转换来控制,用 CI 的术语就是 ”路由“。 1. 路由具体负责做什

在上一课中,我们实现了简单的根据 URI 执行某个类的某个方法。但是这种映射没有扩展性,对于一个成熟易用的框架肯定是行不通的。那么,我们可以让 框架的用户 通过自定义这种转换来控制,用 CI 的术语就是 ”路由“。


1. 路由具体负责做什么的。


 举个例子,上一课中http://localhost/learn-ci/index.php/welcome/hello, 会执行 Welcome类的 hello 方法,但是用户可能会去想去执行一个叫 welcome 的函数,并传递 'hello' 为参数。


 更实际一点的例子,比如你是一个产品展示网站, 你可能想要以如下 URI 的形式来展示你的产品,那么肯定就需要重新定义这种映射关系了。


example.com/product/1/ example.com/product/2/ example.com/product/3/ example.com/product/4/


2. 实现一个简单的路由


  1) 新建 routes.php 文件,并在里面定义一个 routes 数组,routes 数组的键值对即表示路由映射。比如


一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能


1 /**
2* routes.php 自定义路由
3*/
4
5 $routes['default_controller'] = 'home';
6
7 $routes['welcome/hello'] = 'welcome/saysomething/hello';

一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能


  2) 在 index.php 中包含 routes.php


1 include('routes.php');

  3) 两个路由函数,分析路由 parse_routes ,以及映射到具体的方法上去set_request


一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能


1 function parse_routes() {
2 global $uri_segments, $routes, $rsegments;
3
4 $uri = implode('/', $uri_segments);
5
6 if (isset($routes[$uri])) {
7$rsegments = explode('/', $routes[$uri]);
8
9return set_request($rsegments);
10 }
11 }
12
13 function set_request($segments = array()) {
14 global $class, $method;
15
16 $class = $segments[0];
17
18 if (isset($segments[1])) {
19$method = $segments[1];
20 } else {
21$method = 'index';
22 }
23 }

一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能


4) 分析路由,执行路由后的函数,通过 call_user_func_array() 函数


1 parse_routes();
2
3 $CI = new $class();
4
5 call_user_func_array(array(&$CI, $method), array_slice($rsegments, 2));

5) 给 Welcome 类添加 saysomething 函数做测试


一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能


1 class Welcome {
2
3 function hello() {
4echo 'My first Php Framework!';
5 }
6
7 function saysomething($str) {
8echo $str.", I'am the php framework you created!";
9 }
10 }

一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能

测试结果: 访问http://localhost/learn-ci/index.php/welcome/hello,可以看到与第一课不同的输出结果


hello, I'am the php framework you created!



以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索框架 , 实现 , 路由 , codeigniter , 简单 , 重写 功能 ,以便于您获取更多的相关知识。