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. 使用模板,模板中涉及传入的参数
相关文章
|
9月前
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
20963 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
Kubernetes API 调度
【k8s系列5】KubernetesClientException: too old resource version 原因分析
【k8s系列5】KubernetesClientException: too old resource version 原因分析
1987 0
|
NoSQL Ubuntu Redis
Ubuntu开机自启redis
本文介绍了如何在Ubuntu系统中通过创建systemd服务单元文件、重新加载systemd配置、启用服务和启动服务的步骤来实现Redis的开机自启动。
730 1
|
开发工具 git 缓存
Git忽略规则.gitignore不生效
在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。 原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
63013 5
|
Web App开发 数据采集 Java
【Python】已完美解决:selenium.common.exceptions.SessionNotCreatedException: Message: session not created
【Python】已完美解决:selenium.common.exceptions.SessionNotCreatedException: Message: session not created
1687 0
|
Ubuntu Linux iOS开发
Linux (Debian 系) 安装官方微信 (Electron,非 wine 版)
最近才发现微信有推出基于 Electron.js 的一款桌面程序,不需要依赖 Wine 那复杂和冗余的依赖,只需要装一个稍微“大”一点的 deb 包就可以。
18139 0
|
缓存 人工智能 算法
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
4231 0
|
弹性计算 安全 API
HTTP 405 Method Not Allowed:解析与解决
本文详细解析了HTTP 405 "Method Not Allowed" 错误,包括其定义、常见原因、示例代码及解决方案。通过检查API文档、修改请求方法或更新服务器配置,可有效解决此错误,提升Web开发效率。
8519 2
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
8898 1
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:逻辑回归
Python基础算法解析:逻辑回归【2月更文挑战第20天】
484 1
Python基础算法解析:逻辑回归