Typecho Framework简介

简介: Typecho Framework是SegmentFault所用的框架,由创始人joyqi亲手打造。joyqi也是国内知名博客平台Typecho的作者。

Typecho FrameworkSegmentFault所用的框架,由创始人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封装,InsertDeleteQuerySelectUpdate等等。


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给出的小练习:

  1. 输出Hello World
  2. 使用模板输出Hello World
  3. 使用模板,模板中涉及传入的参数
相关文章
|
Java Maven
IDEA打包maven项目同时带上依赖
IDEA打包maven项目同时带上依赖
1568 0
IDEA打包maven项目同时带上依赖
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
21510 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
9月前
|
人工智能 供应链 自动驾驶
向AI构建能力,用模型产出价值,让金融优质发展
近年来,新一代人工智能技术迅速发展,给各行业的变革带来新的机遇。大模型、智能体、AI基础设施快速升级,面向未来,AI具有新的方向和时代定义,无疑成为新的生产力。
717 0
|
机器学习/深度学习 存储 缓存
万物皆Contrastive Learning,从ICLR和NIPS上解读对比学习最新研究进展(二)
万物皆Contrastive Learning,从ICLR和NIPS上解读对比学习最新研究进展(二)
1615 0
万物皆Contrastive Learning,从ICLR和NIPS上解读对比学习最新研究进展(二)
|
开发框架 监控 前端开发
Playwright进阶篇 (5) | 网络请求拦截与Mock
Playwright 提供强大的网络请求拦截与 Mock 能力,支持修改请求参数、模拟 API 响应、构造异常场景、加速测试执行,提升测试效率与可靠性。
|
监控 JavaScript Shell
模拟zabbix通过snmp实现接口流量监控
模拟zabbix通过snmp实现接口流量监控
模拟zabbix通过snmp实现接口流量监控
|
XML 缓存 编解码
Qt开发技术:QtSVG介绍、使用和Demo
Qt开发技术:QtSVG介绍、使用和Demo
Qt开发技术:QtSVG介绍、使用和Demo
|
人工智能 供应链 云栖大会
做好全域消费者数智化营销 太古可口可乐念好数字化的“经”
做好全域消费者数智化营销 太古可口可乐念好数字化的“经”
608 0
做好全域消费者数智化营销 太古可口可乐念好数字化的“经”
|
消息中间件 Java 中间件
RocketMQ延迟消息的代码实战及原理分析
在RocketMQ中,支持延迟消息,但是不支持任意时间精度的延迟消息,只支持特定级别的延迟消息。如果要支持任意时间精度,不能避免在Broker层面做消息排序,再涉及到持久化的考量,那么消息排序就不可避免产生巨大的性能开销。
4340 0
|
Windows
scrlk键是什么意思(电脑键盘每个按键的作用详细图解)
scrlk键是什么意思(电脑键盘每个按键的作用详细图解)
9418 0