一、什么是 FuelPHP?

FuelPHP 是一种全新的框架设计方法,力求更社区化。已经有一百多名开发人员贡献和扩展了源代码。为当前可用的框架提供一些最好的文档还有很多帮助。

因为它是由社区驱动的,所以每个人在发现 bug、提供修复或向框架添加新功能方面都处于平等的地位。这导致了诸如新的时态ORM对象关系映射器)等功能的创建,这是任何基于 PHP 的 ORM 的第一个。这还意味着每个人都可以帮助构建使开发更容易、更直接和更快的工具。

该框架是轻量级的,允许开发人员只加载他们需要的内容。这是一种配置优于约定的方法。它们不是强制执行公约,而是作为建议和最佳做法。这使得新的开发人员可以跳转到一个项目上,更快地赶上进度。当我们想为项目寻找额外的团队成员时,它也会有所帮助。

本章涵盖的主题包括:

  • FuelPHP 简史
  • FuelPHP 的特性
  • 在版本 2 中期待什么

FuelPHP 的简史

FuelPHP 一开始的目标是采用其他框架的最佳实践,形成一个完全现代化的起点,充分利用 PHP 5.3 版的功能,如名称空间。它几乎没有遗留问题和兼容性问题,这些问题会影响旧框架。

该框架由Dan Horrigan于 2010 年启动。菲尔·斯特金、杰尔默·施鲁德、哈罗·弗顿和弗兰克·德容格也加入了他的行列。FuelPHP 与 CodeIgniter 等其他框架有所不同,后者基本上仍然是 PHP4 框架。这一突破为 PHP5.3 创建了一个更现代的框架,并汇集了其他语言和框架的数十年经验,如 RubyonRails 和 Kohana。经过一段时间的社区开发和测试,FuelPHP 框架的 1.0 版于 2011 年 7 月发布。这标志着一个可以在生产现场使用的版本,标志着社区发展的开始。

社区定期发布(在撰写本文时,版本为 1.7)并提供清晰的路线图(http://fuelphp.com/roadmap 要添加的功能的。这还包括迄今为止所取得进展的良好指南。

FuelPHP 的开发是一个开放的过程,所有代码都托管在 GitHub 的上 https://github.com/fuel/fuel ,主要核心包可在 Fuel GitHub 帐户的其他存储库中找到,完整的核心包列表可在中找到 https://github.com/fuel/

FuelPHP 的特点

使用定制 PHP 或定制开发的框架可以提高性能。FuelPHP 提供了许多特性、文档和一个很棒的社区。以下部分介绍了一些最有用的功能。

(H)MVC

尽管 FuelPHP 是一个模型视图控制器MVC框架),但它是为了支持 MVC 的 HMVC 变体而构建的。第三章架构详细介绍了 MVC 设计模式。层次模型视图控制器HMVC是一种分离逻辑,然后在多个位置重用控制器逻辑的方法。这意味着,当使用主题或模板部分生成网页时,可以将其拆分为多个部分或小部件。使用这种方法,可以在整个项目或多个项目中重用组件或功能。

除了通常的 MVC 结构外,FuelPHP 还允许使用表示模块(ViewModels)。这是一个强大的层,位于控制器和视图之间,允许使用较小的控制器,同时仍然将视图逻辑与控制器和视图分离。如果这还不够,FuelPHP 还支持基于路由器的方法,您可以直接路由到闭包。然后处理输入 URI 的执行。

模块化、可扩展

FuelPHP 的核心经过设计,因此无需更改核心中的任何代码即可对其进行扩展。它引入了包的概念,包是可以在项目和人员之间共享的自包含功能。与内核一样,在新版本的 FuelPHP 中,可以通过Composer工具安装。与软件包一样,功能也可以划分为模块。例如,可以创建一个完整的用户身份验证模块来处理用户操作,例如注册。模块可以包括逻辑和视图,并且可以在项目之间共享。包和模块之间的主要区别在于包可以是核心功能的扩展,它们不可路由,而模块是可路由的。第 5 章第 6 章高级主题涵盖了包和模块。

安全

每个人都希望自己的应用程序尽可能安全;为此,FuelPHP 为您处理一些基本问题。FuelPHP 中的视图将对所有输出进行编码,以确保其安全,并能够避免跨站点脚本XSS攻击。此行为可以被包含的 htmLawed 库覆盖或清除。

框架还支持跨站点请求伪造CSRF)令牌防范、输入过滤、查询生成器等,试图帮助防范 SQL 注入攻击。PHPSecLib用于提供框架中的一些安全特性。

油–命令行的动力

如果您熟悉 CakePHP、Zend 框架或 Ruby on Rails,那么您将对 FuelPHP Oil 感到满意。它是 FuelPHP 的核心命令行实用程序,旨在加快开发速度和效率。它还有助于测试和调试。它虽然不是必不可少的,但在发展过程中却是不可或缺的。

Oil 为代码生成、搭建、运行数据库迁移、调试以及后台操作的 cron 类任务提供了一种快速方法。它还可以用于自定义任务和后台进程。

油为包装,可在处找到 https://github.com/fuel/oil

ORM

FuelPHP 还附带了一个对象关系映射器ORM包,该包通过面向对象的方法帮助处理各种数据库。它相对较轻,不应取代更复杂的 ORM,如条令或推进。

ORM 还支持数据关系,如:

  • 属于
  • 有一个
  • 有很多
  • 多对多关系

另一个很好的特性是级联删除;在这种情况下,ORM 将删除与单个条目关联的所有数据。

ORM 包与 FuelPHP 分开提供,托管在 GitHub 的上 https://github.com/fuel/orm

基本控制器类和模型类

FuelPHP 包括几个类,以使项目处于领先地位。其中包括帮助模板的控制器,一个用于构建 RESTful API,另一个用于组合模板和 RESTful API。

在模型端,基础类包括积垢创建读取更新删除操作。有一个用于软删除记录的模型,一个用于嵌套集,最后是一个时间模型。这是保存数据修订的一种简单方法。

认证包

认证框架为用户认证和登录功能提供了良好的基础。可以使用新身份验证方法的驱动程序对其进行扩展。一些基本功能(如组、基本 ACL 函数和密码哈希)可以直接在身份验证框架中处理。

尽管安装 FuelPHP 时包含了身份验证包,但它可以单独升级到应用程序的其余部分。代码可从获取 https://github.com/fuel/auth

模板解析器

解析器包使得从视图中分离逻辑变得更加容易,而不是将基本 PHP 嵌入到视图中。FuelPHP 支持多种模板语言,如 Twig、Markdown、Smarty 和HTML 抽象标记语言Haml)。

文件

尽管不是实际框架的一个特别功能,但是 FuelPHP 的文档是最好的可用文档之一。每次发布都会保持最新,可在上找到 http://fuelphp.com/docs/

在 2.0 版中期待什么

尽管本书重点介绍了 FuelPHP1.6 及更新版本,但值得期待该框架的下一个主要版本。它带来了显著的改进,但也改变了框架的运行方式。

全局范围,转向依赖注入

FuelPHP 的一个很好的特性是全局作用域,它允许在需要时使用简单的静态语法和实例。版本 2 中最大的变化之一是不再使用静态语法和实例。框架使用了多通设计模式、而不是单通设计模式。现在,大多数 Multiton 将被依赖注入容器DiC)设计模式所取代,但这取决于所讨论的类。

更改的原因是允许对核心文件进行单元测试,并根据应用程序的需要动态交换和/或扩展其他类。转向依赖注入将允许隔离测试所有核心功能。

在详细介绍下一个特性之前,让我们更详细地浏览一下设计模式。

独生子女

确保一个类只有一个实例,并为其提供全局访问点。我们的想法是,类或对象的单个实例可能更有效,但它可以为类添加不必要的限制,而使用不同的设计模式可能会更好地服务于这些类。

多通

这与 singleton 模式类似,但在其基础上进行了扩展,以包括一种将命名实例的映射作为键值对进行管理的方法。因此,这种设计模式没有类或对象的单个实例,而是确保每个键值对都有一个实例。通常,multiton 被称为 Singleton 的注册表。

依赖注入容器

此设计模式旨在删除硬编码依赖项,并使在运行时或编译时更改它们成为可能。

一个例子是确保变量具有默认值,但也允许重写它们,还允许将其他对象传递给类进行操作。

它允许在测试功能时使用模拟对象。

编码标准

深远的变化之一将是编码标准的差异。FuelPHP 2.0 版现在将同时符合 PSR-0 和 PSR-1。这允许更标准的自动加载机制和使用 Composer 的能力。尽管在版本 1.5 中引入了 Composer 兼容性,但这次迁移到 PSR 是为了更好的一致性。这意味着方法名称将遵循“camelCase”方法,而不是当前的“snake_case”方法名称。虽然这只是一个简单的更改,但可能会对现有项目和 API 产生很大影响。

随着其他 PHP 框架向更标准化的编码标准的类似移动,将有更多机会重用其他框架的功能。

包装管理与模块化

其他语言的包管理,如 Ruby 和 RubyonRails,使得共享代码和功能变得简单和常见。PHP 的世界要大得多,同样的功能共享也不常见。PHP 扩展和应用程序库PEAR)是大多数包管理器的前身。它是一个可重用 PHP 组件的框架和分发系统。尽管它非常有用,但它并没有得到更流行的 PHP 框架的广泛支持。

从 FuelPHP 1.6 开始,到 FuelPHP 2.0,通过 Composer(实现依赖关系管理 http://getcomposer.org 。这不仅涉及单个包,还涉及它们的依赖关系。它允许项目一致地使用每个项目所需的库的已知版本进行设置。这不仅有助于开发,而且有助于项目的可测试性和可维护性。

它还抗议 API 更改。FuelPHP 和其他模块的核心将通过 Composer 安装,一些版本 1 软件包将逐步迁移。

向后兼容

FuelPHP 将发布一个遗留的包,该包将为更改后的函数名提供别名,作为编码标准更改的一部分。它还允许当前使用的静态函数调用继续工作,同时允许更好地对核心功能进行单元测试。

提速

虽然在最初的 alpha 阶段开始变慢,但 2.0 版正在形成比 1.0 版更快的速度。目前,beta 版(在编写本文时)的速度提高了 7%,而需要的内存减少了 8%。这听起来可能不多,但如果在多台服务器上运行一个大型网站,就相当于节省了一大笔钱。在剩下的优化完成后,在 2.0 版的最终版本中,这些数字可能会更好。

总结

现在,我们对 FuelPHP 的历史和一些有用的特性,如 ORM、身份验证、模块、(H)MVC 和 Oil(命令行界面)有了更多的了解。

我们还列出了以下有用的链接,包括官方 API 文档(http://fuelphp.com/docs/ 和 FuelPHP 主页(http://fuelphp.com )。

本章还介绍了 FuelPHP 版本 2.0 中的一些新特性和更改。

在下一章中,我们将安装 FuelPHP,并介绍不同的环境和配置。