Typecho Framework是SegmentFault所用的框架,由创始人joyqi亲手打造。joyqi也是国内知名博客平台Typecho的作者。
Typecho Framework代码已经开源,本文简单介绍Typecho Framework,希望能帮助PHPer了解 Typecho Framework。
目录结构
Typecho Framework的目录结构如下:
- Cache
- DB
- Helper
- MVC
- Validator
Cache
基于Redis的缓存。
Redis是一个开源、基于内存、键值对数据库,使用ANSI C编写。Redis这种基于内存的性质,与在执行一个事务时将每个变化都写入硬盘的数据库系统相比就显得执行效率非常高。
DB
顾名思义这就是和数据库打交道的。
- Connector.php
- Adapter
- Query
Connector
Connector.php
中是Connector
类,封装了数据库的初始化、选取、更新、增删、插入、查询等操作的函数。
Adapter
数据库的适配器,支持SQLite、MySQL、PostgreSQL。
Query
具体的query封装,Insert
、Delete
、Query
、Select
、Update
等等。
Helper
提供一些辅助功能:
- Autoloader.php 自动加载
- Config.php 配置
- HttpClient.php HTTP客户端
- Logger.php 日志
Validator
顾名思义,各种验证。例如URL、Email、字符串长度,等等。
上面的介绍有意略过了Mvc,因为这部分是整个框架的核心,留待下面重点介绍。
MVC
HTTP请求由Server容器处理,Server容器中包括请求、响应、路由、拦截器等对象。Server收到HTTP请求后,会生成相应的请求和响应对象,以注入的方式传给Action。
获得Server注入的对象后,Action与更后端的Service打交道,获取所需的数据。例如数据库等操作,都由Service打理。Action从Service获取所需数据后,传递result给Server的响应对象。
Action传递result,这是Typecho Framework的特色。result可以是template,也可以是json,等等。使用result,方便代码更好地复用。
上面提到了注入。这也是Typecho Framework的特色。关于注入这个概念,可以参考wikipedia的解释。举个例子吧。假设Action A需要使用Model X,通常的做法是用$this->load(XModel)
来导入,或者直接使用$this->Xmodel
(通过__get
这样的magic method实现)。而使用了注入,则只需在Action A中使用private XModel
声明,非常的优雅,由于XModel在内存中只有一个实例,性能上也很不错。
小练习
做中学是一种高效的学习方法。通过上面的介绍,你应该对Typecho有了一定的了解,现在是练手的时候了。
参考Typecho Framework的源代码,以及Typecho Framework示例,完成以下三个joyqi给出的小练习:
- 输出
Hello World
- 使用模板输出
Hello World
- 使用模板,模板中涉及传入的参数