关于 FleaPHP

article/2025/9/12 4:09:26
FleaPHP 并不是心血来潮的结果,而是作者在 Web 开发中不断探索的成果。虽然 FleaPHP 缺乏 Zend Framework 那样巨大的号召力,也没有 CakePHP 和 Symfony 那样庞大的社区。但 FleaPHP 仍然是一个值得你花时间去了­解、去学习的框架。

FleaPHP 的设计目标

FleaPHP 致力于减少开发者创建 Web 应用程序的工作量,并降低开­发难度和强度,提高开发效率。

  • 快速、轻量级,避免臃肿的结­构带来的性能损失

    由于 PHP 是解释执行,如果花费太多资­源在框架本身,显然不适合的。就像一台计算机如果把­大量的资源都花在操作系统上了,而应用程序能够得到­的资源却少得可怜,显然是无法让用户接受的。

  • 可扩展、开放性的架构,允许­开发者引入自己的组件或者任何成熟的工具库

    框架虽然提供了许多组件,但­不可能完全满足用户的需求。因此,框架本身应该是松­散耦合、可扩展的。开发者可以很简单的为框架加入新­的组件。同时,框架的逐步发展也不应该影响框架的核­心基础。最后,开放性的架构让开发者在框架中引入其­他组件或者工具库时不会遇到任何困难。例如开发者可­能会使用 Smarty 来做模板引擎,以及 PEAR 中的一些库来简化开发工作。

  • 尽可能少的契约,但同时提供­足够的自动化能力,减轻开发强度

    虽然契约式编程,可以让框架­本身的设计变得更简单,开发者也能从框架获得更多的­帮助。但太过严格的规则和约定会明显降低框架的适应­性,为此需要对两者进行适当的平衡。Fle­aPHP设计时采用尽可能少的­契约,通过更复杂的实现来实现一些自动化能力。或者­以最少量的配置信息来帮助框架为开发者提供服务。

  • 高度灵活的解决方案,提供开­发应用程序的大多数基本组件

    虽然现在已经有许许多多出色­的工具库可供选择。但对于一些平常的需求来说,这些­工具库可能具有过度杀伤能力(也就是说工具库本身提­供了远远超过需求的功能)。由此带来了学习难度增大­、性能降低等问题。为此,Fle­aPHP 框架提供了一组轻量级的基本­组件。这些组件被设计为拥有基本的功能和可扩展。 例如 FleaPHP 附带的基于角色的权限验证组件虽然不如 phpGACL 这样的库功能强大,但却能够­解决平常开发都会遇到的典型权限验证问题,并允许开­发者自行扩展这个组件。



FleaPHP 的主要特征

除了 MVC 模式实现、Dispatcher 调度器、模板引擎等常见功能­外,FleaPHP 框架还拥有许多独一无二的特点:

  • 简单、容易理解的 MVC 模型

    不像其他流行的框架,FleaPHP 提供的 MVC 模型注重简单和容易理解。例如 FleaPHP 不要求开发者从特定的类派生­自己的控制器类和业务模型类。

  • 易于使用、高度自动化的数据库 CRUD 操作

    FleaPHP 采用 TableDataGateway 设计模式来封装数据表操作。­FLEA_Db_Table­DataGateway 类不但提供了容易使用的 CRUD 操作,还实现了数据表之间的­关联操作。同时,FleaP­HP 没有像其他框架那样将每一行­记录都封装为一个对象(毫无疑问这会产生明显的性能­问题),而是利用 PHP 强大的数组来保存和传递数据。

  • 尽可能少的配置

    虽然像数据库联接信息等配置­仍然是不可少的,但 FleaPHP 应用程序通常只需要设置几个­选项,即可在各种环境中运行良好。而且 FleaPHP 的所有设置都采用 PHP 数组来保存,不但容易理解,­而且省掉了解析、缓存等不必要的过程,提高了性能。

  • 高度可配置能力

    虽然 FleaPHP 自动化程度很高,但 FleaPHP 同时也拥有高度的可配置能力。通过覆盖 FleaPHP 默认的选项,开发者可以获得­最大程度的灵活性。让开发者可以在适应现有代码、保­持开发习惯等各方面获得好处。

  • 自动化的数据验证和转义

    即便不做任何处理,程序将数据通过 FLEA_Db_Table­DataGateway 提交到数据库前。FleaPHP 也会自动对数据进行验证,并­转义特殊字符,最大程度消除 SQL 注入攻击。

  • 丰富的助手对象和组件

    FleaPHP 附带了一些非常实用的助手对­象,从生成图像验证码、处理文件上传到通用数据验证­等。这些助手对象大多是一些独立的对象,完全不依赖于 FleaPHP 框架本身。因此开发者不但可以在 FleaPHP 之外使用这些助手对象,也可­以方便的加入自己的助手对象。 组件是比助手对象更为复杂的­可重用单元。这些组件包括基于角色的用户管理、脚手­架等。利用这些组件,开发者可以很快的完成一些常见­任务,并能在这些组件基础上扩展出功能更复杂的组件。

  • 与 Smarty 集成

    只需要修改几个选项,FleaPHP 应用程序就可以和流行的 Smarty 模版引擎集成。

  • 100% FREE

    当然,最后一点就是 FleaPHP 是一个完全开放源代码和文档­(不是那种滑稽的删除了所有注释仅能运行的代码)、­不限制使用的项目。你可以自由的学习、使用 FleaPHP,也可以在自己的应用­程序中使用 FleaPHP。不管你的应用程序是­否是商业应用,都不需要公开你的源代码,从最大程度­上保护了你的知识产权。不过如果你愿意将代码反馈到­社区,那么大家都会感谢你。

请记住,FleaPHP 是一个持续发展的框架,随时­有新特性被加入到框架中。你现在需要,但 FleaPHP 尚未提供的功能,也许不久以后就出现在 FleaPHP 中了。当然,这需要你积极参与 FleaPHP 的发展,提出你的建议和意见。



自由的 FleaPHP

FleaPHP 是一个遵循 BSD 协议发布的开放源代码应用程­序开发框架。你可以免费获取 FleaPHP 框架,并应用到自己的开发工­作中。与流行的 GPL 协议不同,FleaPHP 遵循的 BSD 协议不要求开发者将基于 FleaPHP 框架开发的应用程序公布于众­。这很好的保护了开发者及其所属企业的利益。更进一­步,即便你基于 FleaPHP 实现了自己的产品或者对 FleaPHP 进行了修改以满足自己的需求­。你仍然不需要公布你的劳动成果。

下面是关于 BSD 协议的简单介绍:

BSD 开源协议是一个给于使用者很­大自由的协议。可以自由的使用,修改源代码,也可以­将修改后的代码作为开源或者专有软件再发布。当你发­布使用了 BSD 协议的代码,或者以 BSD 协议代码为基础做二次开发自­己的产品时,需要满足三个条件:

  • 如果再发布的产品中包含源代­码,则在源代码中必须带有原来代码中的 BSD 协议。
  • 如果再发布的只是二进制类库­/软件,则需要在类库/软件的文档和版权声明中包含­原来代码中的 BSD 协议。
  • 不可以用开源代码的作者/机­构名字和原来产品的名字做市场推广。

BSD 协议鼓励代码共享,但需要尊­重代码作者的著作权。BSD 由于允许使用者修改和重新发­布代码,也允许使用或在 BSD 代码上开发商业软件发布和销­售,因此是对商业集成很友好的协议。很多的公司企业­在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些­第三方的代码,在必要的时候可以修改或者二次开发。

 



FleaPHP的起源

两年多以前,我开始涉及使用 PHP 开发 Web 应用的工作。在反复编写一些­过程式代码后,我彻底厌倦了这种开发方式,开始怀念 C++ 中的面向对象设计。这时,正好在 ChinaUnix 上看到了shukebeita­兄的精华贴。在这篇帖子里,shu­kebeita 提出了一种面向对象的 PHP 应用开发方式。虽然只有一个­雏形,但这已经让我受益匪浅。

随后,我根据 shukebeita 的思路实现了 PFC 的第一个版本(当时命名为轻量级 OO 框架)。其实说起来,根本不­能称之为框架,仅仅只有两个类。但已经实现了一个简­单但实用的核心结构。现在回过头来看,PFC1 实际上实现了一个 Dispatcher 模式,根据 HTTP 请求中的 action 参数调用不同的代码。

在接下来的两年时间,PFC 不断翻新,最终发展到了 PFC3。该版本的 PFC 已经完整的实现了 Dispatcher、MVC 模式,并且引入了 ViewDriver 抽象层、基于角色的权限验证、采用 Provider 模式实现的用户和角色信息管­理、一个简单的但带有缓存功能模板引擎等内容。期间­曾经试图将 PFC 发扬光大(笑),可惜由于工­作变动和个人原因,项目进度非常缓慢,最后终于放弃­了。但导致 PFC 放弃的主要原因并不是因为进­度缓慢,而是因为我看到了 Web 应用开发的杀手 —— Ruby on Rails。

Ruby on Rails

Ruby on Rails(后文简称 RoR)是一个采用 Ruby 语言实现的快速、轻便的 Web 应用开发框架,通过契约式编程大大简化了 Web 应用的开发工作。

所谓契约式编程,基本思想就­是开发者必须严格遵守框架确定的一些规则和模式(例­如对象命名、数据库主键字段命名等)。由于这些规则­和模式的存在,框架可以自动完成许多以前需要开发者­自己处理的工作。例如根据特定的名字,获取业务对象­或者数据表操作对象。更主要的原因是 RoR 实现了 ActiveRecord 模式,并且在这个基础模式之­上,扩展了许多便于开发者操作数据库的方法。

虽然 ActiveRecord 只能处理 Create(建立)、Re­ad(读取)、Update­(更新)、Delete(删除)等数据表操作,以­及一对一、一对多和多对多等几种有限的数据表间关联­关系。但我们平时开发的大量应用程序,CRUD 又何尝不是其中的主要内容呢­。因此,RoR 为开发者解决了大部分日常任­务,让开发者可以集中精力到更关键的地方,例如业务­流程的实现。

在我看到 RoR 后,明白 PFC 虽然已经解决了 MVC 模式、权限验证等任务,但最­主要的数据库访问却没有提供任何能够简化开发的解决­方案。经过反复考虑,我终止了 PFC 系列,开始了一个“全新”的框架设计。

Flea1 与 FleaPHP

最初,这个新框架沿用了PF­C系列的命名方式,命名为 flea1(也就是 FLEA 第一版)。在这个版本中,我­试验了一些想法,并取得了不错的效果。

不过,我没有采用严格的 ActiveRecord 模式,而是采用了类似CakeP­HP,一个类似 RoR 的 PHP 框架的 Model 设计。这种设计既实现了 CRUD 操作,又实现了数据表间的关­联操作。将这个最初版本的 flea1 框架应用到实际工作中后,马­上取得了立竿见影的效果。数据库访问工作被大大简化­,甚至连数据库访问代码都不用写了。而且对于数据表­之间的关联,也能完成自动化的处理。

接下来,我拿到了《企业应用­架构模式》这本经典的设计模式书籍。经过仔细研究,­并实际测试。我发现在 PHP 里面使用 ActiveRecord 模式并不是一个很好的选择。因为 ActiveRecord 实际上是针对数据表里面的每­一个数据行构造一个对象。这样一来,对于 PHP 这种面向对象能力不强(尤其是 PHP4)的脚本语言来说,­带来了许多棘手的问题。

最终,flea1 的设计方案进行了一些调整,­确定为现在的架构,并且框架命名为 FleaPHP。



未来的发展

FleaPHP 在外来将继续保持简单易用、­高度模块化的特点,但同时通过可插入的模块形式提供­更多的功能。

FleaPHP 项目的短期目标:

  • 完善文档

    一个成功的项目,离不开完善­的文档和技术支持。目前,Fle­aPHP 的核心和主要功能已经日趋稳­定,但文档还很匮乏。所以,近期 FleaPHP 项目组的主要工作就是完善文­档,确保开发者能够尽快掌握 FleaPHP 的使用。文档目前正在撰写的­包括开发指南和一些系列文章。

  • 支持更多的数据库系统

    目前,FleaPHP 仅能支持 MySQL 数据库。但由于 FleaPHP 的数据库抽象层非常简单,所­以短期内即可增加对多种数据库的支持。

FleaPHP 项目的长期目标:

  • 以插件形式提供更多的功能

    由于 FleaPHP 开放式的结构,开发者可以很方便的为 FleaPHP 提供更多的插件。这些将要增­加的插件包括完整的 Ajax 支持。

  • 吸收开发者参与,将 FleaPHP 建设为一个成功的社区开源项目

如果你有热情,并且有能力为 FleaPHP 做贡献,我们随时都欢迎你加入 FleaPHP 开发者团队!


http://chatgpt.dhexx.cn/article/PBwZPaDw.shtml

相关文章

http头部content-type与数据格式

http 头部中的 content-type 和我们传递的数据是息息相关的,不同的取值,服务器解析处理方式不同, 介绍一下几种常见的方式 text/plain:ajax默认方式,将文件设置为纯文本的形式,浏览器在获取到这种文件时…

http 协议中的content-type

content-type可以位于请求头、响应头,分别代表: Request头:请求的与实体对应的MIME信息(post请求时的请求体)Response头:返回内容的MIME类型 由于http1.0版规定,头信息必须是 ASCII 码类型&am…

contentType的类型及其在上传下载的例子

content-type之上传下载 下载 Content-Type 实体头部用于指示资源的MIME类型,在响应中,Content-Type标头告诉客户端实际返回的内容的类型。 Content-Disposition 是 MIME 协议的扩展,通常用在下载文件时,是下载文件的一个标识字…

Http中Content-Type等属性详解

前言 一直以来对HTTP请求中各种属性一知半解,偶然在博客中找到一篇,特意摘录过来方便自己以后查看. 正文 敬请关注博客,后期不断更新优质博文,谢谢 这里讲解Content-Type的可用值,以及在spring MVC中如何使用它们来映射请求信息。 1. Con…

HTTP首部——Content-Type的作用

前言 对于我们习以为常的东西,却没有仔细思考它的作用。 HTTP的首部都各有个的价值,最近看到这个Content-Type,忽然让我想起来以前自己的一个小小的失误,而产生了一个bug。但是当时却搞得我焦头烂额,我在网络上查找了一…

http(S)系列之(一):概念

参考文章: HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学) 一篇比较全的HTTP协议详解 记:千万别误会,本章是完全ctrlc然后ctrlv,知识理解才是最重要,不必要在…

http 协议之 Content-Type

Content-Type 字段是 http 服务端返回给客户端时,head 里面带上的,这个字段表明服务端返回给客户端的 body 是什么类型的,然后客户端就可以根据这个类型进行文件处理。如浏览器客户端,针对 text/html 类型时,是直接显示…

Http中的Content-Type详解

Content-Type Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#x…

HTTP(S)协议详解

1 什么是协议 协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。 粗俗理解协议就是 比如你的电脑和我的电脑要通信,&a…

详解Http的Content-Type

目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 1.概述 HTTP(HyperText Transfer Protocol),超文本传输协议。超文本&#xf…

Http协议之Content-Type理解

Content-Type,翻译过来就是”内容类型“,在互联网中就是”互联网媒体类型“。 在互联网中,两台计算机经常会传输数据,客户端会给服务器发数据,服务器也会给客户端发数据。数据的类型也是有很多种的,我们把所…

tomcat修改jdk配置两种方法

由于一个电脑多个项目,可能会使用多个版本的jdk,所以在跑tomcat的时候,可以自定义配置的各项目所使用的jdk 配置步骤(window设置): 1. 在catalina.bat找到如下代码: echo Using JAVA_HOME: “%JAVA_HOME%” 替换成 echo Using JAVA_HOME: “E:\Company\Tool\jdk1.7.0_13” 如…

linux下jdk配置

一、jdk下载 jdk下载地址:https://www.oracle.com/java/technologies/downloads/ 二、配置环境变量 1、解压 tar -xvf jdk-11.0.13_linux-x64_bin.tar.gz 2、配置环境变量 修改/etc/profile文件 vim /etc/profile 文件末尾添加 #jdk JAVA_HOME/usr/local/a…

Mac多JDK配置

Mac多JDK配置 开发环境有时候需要配置多个JDK,Windows下配置比较方便,Mac环境下稍微有点曲折 下载对于的JDK 这里我以JDK8、JDK11为例,可以从oracle官网下载,也可以从国内源下载,比如华为源 直接安装后 执行如下命令可以快速…

eclipse及jdk配置

JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台…

JDK配置Path的详细教程(包教包会)

在教程之前,先提示一下,新版本的JDK(比如17)是不需要我们配置的,因为我们在下载的时候已经自动给我们配置了,但是老版本(比如JDK8)是需要我们自己去配置的 OK,进入正题,我们先来说一下为什么要给jdk配置path环境? 首先,我们需要清楚的是jdk是java的开发工具,运行一个java程序…

多jdk配置

1.这里默认安装好jdk8和对应的环境变量,本文我们把jdk8的环境修改为jdk17(安装jdk17,下载安装版jdk17一直点下一步就行,没有好讲的) 2.系统CLASSPATH变量值为(下面都是在系统变量位置进行操作): .;%JAVA_HOME%\bin;%JAVA_HOME%\lib\tools.jar;%JAVA_HO…

Mac开发环境jdk配置

第一步: 下载JDK oracle 官网下载jdk版本 阿里云分享了已经在官方下载好的jdk8 阿里云盘分享https://www.aliyundrive.com/s/pNhjrrG3Pxf密码:8q8f 第二步骤:打开终端 第三步骤 :执行命令 查看JDK下载路径 执行命令:…

java中的jdk配置详解:

java中的jdk配置详解: 1.配值系统变量"JAVA_HOME" 变量名JAVA_HOME: 指向:JDK(java开发工具包)的安装路径 目的:使用JDK安装目录时,可以直接通过”%JAVA_HOME%“访问,避免路径过长麻烦 归一原则&#xff…

JAVA-JDK配置说明

JDK开发环境配置说明 JDK原理 JDK配置JDK与JRE区别 JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (注意查看本地电脑的版本,对应相同的系统,选择下载jdk) 目录 JDK开发环境配置说明 JDK下载地址…