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. 使用模板,模板中涉及传入的参数
相关文章
|
NoSQL Ubuntu Redis
Ubuntu开机自启redis
本文介绍了如何在Ubuntu系统中通过创建systemd服务单元文件、重新加载systemd配置、启用服务和启动服务的步骤来实现Redis的开机自启动。
526 1
|
11月前
|
数据采集 自然语言处理 搜索推荐
通义千问赋能CACA指南:构建智慧肿瘤诊疗新生态
本文探讨了如何利用阿里云通义千问大模型,结合中国抗癌协会(CACA)编撰的《中国肿瘤整合诊治指南》,打造新一代智能化临床决策支持系统。该系统通过分层架构设计,实现智能问答、临床决策支持和患者管理等功能,显著提升了医生的工作效率和治疗方案的科学性。
479 1
|
12月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
Linux 网络安全 Windows
如何通过隐藏服务器真实IP来防御DDOS攻击
如何通过隐藏服务器真实IP来防御DDOS攻击
|
12月前
|
Web App开发 缓存 Linux
高效Selenium测试技巧:轻松控制已开启的浏览器
【10月更文挑战第13天】在进行Selenium测试时,通常会启动新浏览器实例,但有时需要控制已开启的浏览器,以节省时间并更真实地模拟用户行为。这可通过设置Chrome为可远程控制并使用`Remote WebDriver`连接实现。需在启动Chrome时添加`--remote-debugging-port`参数,并通过Python脚本中的`webdriver.Remote`连接至指定端口。此外,还可利用会话ID(Session ID)重新连接浏览器,提高测试灵活性。需要注意浏览器版本兼容性及元素定位稳定性等问题,确保测试准确性和一致性。
939 1
|
缓存 人工智能 算法
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
3031 0
|
安全 数据挖掘 网络安全
电子商务网站建设的关键技术
移动端适配是电子商务网站建设中越来越重要的关键技术。综上所述,电子商务网站建设涉及多个关键技术,包括网站设计与用户体验、安全性、性能与可扩展性、搜索引擎优化、移动端适配以及数据分析与营销。掌握这些关键技术,企业可以建设一个安全、高效、用户…
710 0
|
Ubuntu Linux iOS开发
Linux (Debian 系) 安装官方微信 (Electron,非 wine 版)
最近才发现微信有推出基于 Electron.js 的一款桌面程序,不需要依赖 Wine 那复杂和冗余的依赖,只需要装一个稍微“大”一点的 deb 包就可以。
17519 0
|
安全 NoSQL Redis
服务器又被攻击了,我这样做...
近期遭遇阿里云服务器频繁报警,经分析发现是由于测试服务器所有端口对公网开放,导致自动化程序对其扫描。黑客可能利用类似Redis的未授权访问漏洞进行攻击。为避免此类问题,建议:1. 不开放不必要的端口;2. 避免以root权限运行服务;3. 设置服务器IP白名单;4. 定期更换密码。保持良好安全习惯可保障服务器安全。
3740 3
服务器又被攻击了,我这样做...
|
Java 测试技术 Web App开发
《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代码与测试分离(远程测试)
【6月更文挑战第3天】本文介绍了在没有本地浏览器的情况下,如何使用RemoteWebDriver进行远程自动化测试。RemoteWebDriver分为客户端和服务端,客户端运行测试代码,服务端启动服务。服务端需要安装JDK、浏览器和对应的WebDriver,并启动selenium-server-standalone.jar。客户端通过URL连接到服务端,并指定预期的浏览器类型。这样,客户端的测试代码就能远程控制服务端的浏览器执行自动化测试。RemoteWebDriver的优点包括跨平台和浏览器测试、提高测试稳定性以及使测试环境和执行代码的机器分离。
838 3