框架是 slim,https://github.com/codeguy/Sli…,人如其名,真的很 slim,用起来也很简单,就这么几行就可以跑起来了
<?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/:name', function($name) { echo "Hello, $name"; }); $app->run();
需要配合这个 apache 重写规则
RewriteEngine On # Some hosts may require you to use the `RewriteBase` directive. # If you need to use the `RewriteBase` directive, it should be the # absolute physical path to the directory that contains this htaccess file. # # RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
运行效果如图
跟着源码临摹了一个,现在已经可以跑上面那个例程了,临摹的方法就是顺着函数调用栈,用到哪个就去抄哪个函数过来,呵呵,这么搞现在应该是最简的能跑的了吧
附上现在源码 slim2
调用也是一样的
<?php require 'Slim2/Slim2.php'; $app = new Slim2(); $app->get('/:name', function($name) { echo "Hello, $name"; }); $app->run();
运行效果也是一样的
现在只是实现了最简的
- 一个环境资源类
- 一个封装了请求的类
- 一个路由器类
- 一个路由规则类
- 还有把他们结合在一起的核心类
目前没有实现中间件
在这个框架中,一次请求其实这么来实现的
- 请求从 index.php 这个统一入口进来
- index.php 构造一个 slim 的实例对象
- slim 对象在初始化的时候构造运行环境类(environment),还有请求类(request),以及一个回应类(response),和一个路由器类(router)
- 环境类顾名思义负责收集和整合运行环境的信息,包括请求方法,远端 IP,请求路径,运行的服务器名,服务器端口等等
- 请求类其实跟环境的内容有稍稍重复,不过他更是明确职责一些,封装的内容也就是请求方法,请求路径等
- 回应类主要负责响应的 http header,还有 set get cookie,还有就是响应正文了
- 路由器类管理众多的路由规则,每个路由规则对应一个路由类的实例,同时负责匹配路由的选取(是选取,他不负责具体的匹配计算,匹配计算由每个路由类的实例自己完成)
- 路由类负责解析请求的字符串,把他们正则匹配解析到变量中,以备响应函数的使用
- 然后就是总揽全局的调用类了,(虽然我没有实现中间件类,但是这个框架却把自己这个调用者本身也当作一个中间件),这个总管的 call 函数负责把请求送到路由器中,让他去求得命中的路由,然后调用该路由的 callable 函数,然后送到响应类去输出
- 后面应该还要实现一些模版,渲染引擎之类的东西,现在还没做
=============================================================
2012-08-31 15:26:59 update 发现了框架作者自己写的一篇文章讲一个请求的生命周期的,比我这清晰多了,http://www.slimframework.com/r…,另外买一送一附送一篇,http://www.slimframework.com/r…
Pingback: 从点击到呈现 — 详解一次HTTP请求(3) | ZRJ