FuelPHP - 快速指南


FuelPHP - 简介

FuelPHP 是一个开源 Web 应用程序框架。它是用 PHP 5.3 编写的并实现 HMVC 模式。HMVC分层模型-视图-控制器框架,允许对控制器进行子请求,该控制器返回部分页面(例如注释、菜单等),而不是像普通 MVC 中那样返回完整页面。

FuelPHP 的创建是为了将CodeIgniterKohana等框架的最佳实践与其自身的改进和想法结合起来。FuelPHP 数据库迁移工具和脚手架功能受到流行的Ruby on Rails框架的启发。

  • FuelPHP通过名为“Oil”的实用程序利用命令行的强大功能。该实用程序旨在帮助加快开发速度、提高效率、测试、调试和 HTML 支持。

  • FuelPHP 纯粹是一种面向对象的方法。其架构基于模块化的思想。应用程序可以分为模块,每个组件都可以扩展或替换,而无需重写一行代码。Fuel 支持任何模板解析器(例如Smarty、Twig、PHPTal等)来解析视图。

  • FuelPHP 社区规模庞大且活跃,拥有 300 多名贡献者。其庞大的社区定期创建和改进软件包和扩展。FuelPHP 框架的主要目标是提供灵活性和兼容性。它速度快、易于学习,是开发 Web 应用程序的完整解决方案。

  • FuelPHP 之所以成为 PHP 开发人员使用的首要框架之一,是因为新版本的 FuelPHP因其稳定的 API 而能够与其旧版本反向兼容。它非常灵活。

  • 包和模块使得以系统的方式重用现有代码变得容易和简单。FuelPHP 通过一个小型库提供最大的性能。其交互式调试可以轻松消除开发中的错误。此外,其干净稳定的代码使编程变得更加容易。

FuelPHP - 功能

FuelPHP 提供了许多功能来创建成熟的 Web 应用程序。它提供灵活的组件、简单的配置、易于使用的 ORM、基于 REST 的应用程序开发模式等。以下是一些显着的功能 -

  • 灵活且社区驱动的 Web 框架
  • 易于配置和使用
  • FuelPHP 非常便携,几乎可以在任何服务器上运行
  • 灵活的URI路由系统
  • FuelPHP提供RESTful API开发支持
  • 轻量级 ORM 模型
  • 输入过滤并防止 SQL 注入
  • 安全认证和授权框架
  • 代码可重用且更易于维护
  • 自动加载类、会话管理和异常处理。

FuelPHP - 优点

FuelPHP 是一个优雅的 HMVC PHP 5.3 框架,它提供了一组用于构建 Web 应用程序的组件,具有以下优点 -

  • 模块化结构- Fuel 不会强迫您使用模块或 HMVC 文件结构。如果你想使用,这个过程很容易集成。FuelPHP 应用程序以模块化结构创建,对于开发人员来说变得更容易,具有明显的好处。

  • HMVC 模式- 该框架最重要的功能是 HMVC(分层模型视图控制器),它可以轻松访问或使用更高级别的任何属性、类方法、函数、文件。

  • 安全散列函数- FuelPHP 支持强大的加密工具和密码散列技术。它使用强大的 PHPSecLib 处理加密、解密和散列。

  • 脚手架功能- 脚手架是一种用于构建数据库操作的元编程方法。Fuel 的脚手架非常简单。它允许您通过非常简单的步骤获得基本的 CRUD 应用程序。

以下流行产品使用 FuelPHP 框架 -

  • Matic Technology - 离岸定制软件开发解决方案的全球提供商。在 Matic Technologies,他们根据客户的要求通过 FuelPHP 提供所有最佳的解决方案。

  • Kroobe - Kroobe 是一家社交网络分类广告公司。Fuel为Kroobe团队提供极低的开发成本和服务,以实现高效的解决方案。

FuelPHP - 安装

本章介绍如何在您的计算机上安装 FuelPHP 框架。FuelPHP 安装非常简单易行。您有两种方法来创建 FuelPHP 应用程序 -

  • 第一种方法是使用名为Oil的 FuelPHP 工具进行命令行安装。

  • 第二种方法是基于 Composer 的安装。FuelPHP 使用Composer来进行安装和包依赖项,因此请确保在继续该过程之前本地安装了 Composer。

让我们在后续部分中一一详细介绍每种方法。

系统要求

在进行安装之前,必须满足以下系统要求。

Web 服务器(以下任何一个)

  • WAMP(Windows)
  • 微软 IIS (Windows)
  • 灯(Linux)
  • MAMP(麦金塔)
  • XAMP(多平台)
  • Nginx(多平台)
  • PHP内置开发Web服务器(多平台)

浏览器支持(以下任何一个)

  • IE(Internet Explorer 8+)
  • 火狐浏览器
  • 谷歌浏览器
  • 苹果浏览器

PHP 兼容性- PHP 5.3 或更高版本。为了获得最大的好处,请使用最新版本。

在本教程中,我们使用 PHP 的内置开发 Web 服务器。内置的开发 Web 服务器很容易启动,并且足以理解 FuelPHP Web 应用程序的基础知识,而无需陷入 Web 服务器和配置世界的复杂性。

命令行安装

FuelPHP 的命令行安装非常简单,最多需要五分钟。

安装油包

Oil 是 FuelPHP 框架提供的一个特殊包/命令,用于完成 FuelPHP 应用程序开发中所需的许多任务,包括安装、开发和测试应用程序。

要安装Oil软件包,请打开 shell 并运行以下命令 -

sudo curl https://get.fuelphp.com/oil | sh

该命令使用curl下载并安装oil包。该命令将显示类似以下信息的结果,并最终安装oil包。

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                                 Dload  Upload   Total   Spent    Left  Speed 
100   479  100   479    0     0    353      0  0:00:01  0:00:01 --:--:--   353

创建一个新项目

要使用 Oil 创建新项目,请使用以下命令 -

oil create <project_name>

让我们使用以下命令创建一个名为“HelloWorld”的新项目。

oil create HelloWorld

现在,您可以看到类似于以下内容的响应,并最终创建一个简单的 FuelPHP 应用程序框架。

composer create-project fuel/fuel HelloWorld 
Installing fuel/fuel (1.8.0.1) 
   - Installing fuel/fuel (1.8.0.1) 
      Loading from cache  

Created project in HelloWorld  

Loading composer repositories with package information 
Updating dependencies (including require-dev) 
   - Installing composer/installers (v1.3.0) 
      Loading from cache
   - Installing fuelphp/upload (2.0.6) 
      Loading from cache  
   - Installing michelf/php-markdown (1.4.0) 
      Loading from cache  
   - Installing psr/log (1.0.2) 
      Loading from cache  
   - Installing monolog/monolog (1.18.2) 
      Loading from cache  
   - Installing phpseclib/phpseclib (2.0.0) 
      Loading from cache  
   - Installing fuel/core (1.8.0.4) 
      Loading from cache  
   - Installing fuel/auth (1.8.0.4) 
      Loading from cache  
   - Installing fuel/email (1.8.0.4) 
      Loading from cache  
   - Installing fuel/oil (1.8.0.4) 
      Loading from cache  
   - Installing fuel/orm (1.8.0.1) 
      Loading from cache  
   - Installing fuel/parser (1.8.0.4) 
      Loading from cache  
   - Installing fuel/docs (1.8.0.4) 
      Loading from cache
   ……………. 
   …………….  
   Writing lock file
   Generating autoload files 

油版

要测试 Oil 是否可用并检查版本,请使用以下命令 -

$ cd HelloWorld
$ php oil -v

上述命令产生以下结果 -

Fuel: 1.8 running in "development" mode

石油帮助指挥部

要获取 Oil 的基本帮助文档,请使用以下命令 -

$ php oil help

上面的命令将显示类似于以下结果的帮助文档 -

Usage: 
   php oil [cell|console|generate|package|refine|help|server|test]  
Runtime options: 
   -f, [--force]    # Overwrite files that already exist 
   -s, [--skip]     # Skip files that already exist 
   -q, [--quiet]    # Supress status output 
   -t, [--speak]    # Speak errors in a robot voice  
Description:   
   The 'oil' command can be used in several ways to facilitate quick development, help 
   with testing your application and for running Tasks.  
Environment: 
   If you want to specify a specific environment oil has to run in, overload the 
   environment variable on the commandline: FUEL_ENV=staging php oil <commands>
More information: 
   You can pass the parameter "help" to each of the defined command to get 
   information about that specific command: php oil package help  
Documentation:   
   http://docs.fuelphp.com/packages/oil/intro.html    

到目前为止,您已经了解如何使用石油安装燃料。让我们在下一节中介绍一下基于 Composer 的安装。

基于 Composer 的安装

以下命令用于使用 Composer 安装 FuelPHP。

$ composer create-project fuel/fuel --prefer-dist.

Git 存储库克隆

要将最新的开发版本安装为本地 git 存储库克隆,请使用以下命令。

$ composer create-project fuel/fuel:dev-1.9/develop --prefer-source.

运行应用程序

移至项目目录 public 文件夹,使用以下命令使用生产服务器运行应用程序。

$ cd path/to/HelloWorld/public
$ php -S localhost:8080 index.php

它产生以下响应。

PHP 5.5.31 Development Server started at Sun May 21 12:26:10 2017
Listening on http://localhost:8080
Document root is /Users/workspace/php-fuel/HelloWorld/public
Press Ctrl-C to quit.

现在,请求 URL http://localhost:8080,它将产生以下结果。

结果

欢迎页面

这是在开发环境中运行 FuelPHP 应用程序的最简单方法。如果您在生产环境中以这种方式创建应用程序,您将面临安全问题。推荐的方法是设置虚拟主机配置。下一节将针对 apache Web 服务器进行解释。

设置虚拟主机

这是访问 FuelPHP 应用程序的更安全的方式。要设置虚拟主机,您需要将 apache 虚拟主机文件链接到您的应用程序。内网应用时,将系统主机文件URL重定向到虚拟主机。

虚拟主机文件

打开虚拟主机并添加以下更改。

<VirtualHost *:80> 
   ServerName hello.app 
   DocumentRoot /path/to/public 
   SetEnv FUEL_ENV “development”
   
   <Directory /path/to/public> 
      DirectoryIndex index.php 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
   </Directory> 
</VirtualHost>

系统主机文件

现在,使用以下命令将主机条目添加到您的计算机。

sudo vi /etc/hosts

然后,将以下行添加到文件末尾。

127.0.0.1 hello.app

要使所有更改可用,请重新启动 Apache 服务器并请求 URL http://hello.app。它生成 FuelPHP 主页。

FuelPHP - 架构概述

FuelPHP 基于久经考验的模型-视图-控制器架构以及HMVC(分层 MVC)支持。MVC 提供了灵活且分层的应用程序开发,而 HMVC 则更进一步,实现了 Web 应用程序的小部件化。

FuelPHP 的优势在于它不强制采用特定的方法来开发应用程序。它只是提供了一个简单易用的标准结构。开发人员可以自由使用 FuelPHP 提供的预定义功能集或在需要时对其进行修改。FuelPHP 提供的所有功能(包括核心功能)都可以根据应用程序的要求进行更改。

模型

模型是应用程序的业务实体。控制器和视图以模型的形式交换数据。模型可以统一表示我们的业务数据。它使数据库层能够以标准方式与 Web 应用程序层交互,并提供选择、保存、编辑和删除数据库实体的选项。

控制器

典型的 MVC 应用程序从控制器开始。一旦用户向 FuelPHP Web 应用程序发送请求,该应用程序就会收集有关该请求的所有信息并将其发送到控制器。控制器执行所请求页面所需的业务逻辑,然后以模型的形式调用相关视图以及处理后的数据。

看法

视图是 MVC 应用程序的表示层。View决定如何向用户展示Model。它支持简单的数据渲染到高级布局,这使得网站能够规范所有页面的设计。View 还提供主题支持,可以在整个应用程序中快速更改设计。

主持人

Presenter 是 FuelPHP 提供的一项特殊功能。它是控制器和视图之间的粘合剂。Controller 可以分担一些低级职责,例如从数据库检索模型、为视图生成数据等。Controller 调用 Presenter 而不是 View,View 又调用 View。Presenter 实现了业务逻辑和表示层的纯粹分离。

分层MVC

FuelPHP 提供了从一个控制器调用另一个控制器的选项,类似于来自客户端(浏览器)的请求。如果任何控制器调用另一个控制器,被调用的控制器会将响应返回给调用控制器,而不是将其呈现给客户端(浏览器)。这使得Web 应用程序能够实现小部件化。例如,评论部分可以显示为独立页面以及主(博客)页面的子部分。

模块

FuelPHP 的显着特征之一是 Web 应用程序的一部分可以转换为模块,可以在不同的应用程序之间共享。例如,为一个应用程序创建的博客模块可以在另一个应用程序中重用,只需将模块代码从源应用程序复制到目标应用程序即可。

请注意,创建新模块与开发主应用程序一样简单。该结构与主应用程序类似,唯一的例外是该模块应该编码一个单独的文件夹。

包裹

FuelPHP 提供了一个选项,可以将代码组织到一个称为 Package 的单元中。包可以包含 Web 应用程序所需的一项或多项功能。例如,ORM、电子邮件等数据库组件可以组织成一个包,并在需要时使用。

包与模块的不同之处在于包不包含任何网页或部分网页。包可以在 FuelPHP 以及任何其他 PHP 框架中使用。

工作流程

FuelPHP 的工作流程简单且易于理解。如下图所示。

工作流程
  • 用户向应用程序发送请求。

  • 控制器接收请求并通过与模型交互来收集信息,模型又与数据库交互。

  • 控制器通过向其他控制器发送子请求来与其他控制器交互来收集信息。

  • 控制器将检索到的模型发送到视图,视图又生成演示并将其作为响应发送到客户端。

  • 在某些情况下,控制器可以将控制权传递给演示者。在这种情况下,演示者从模型收集信息并将其发送给客户端。在这里,演示者不执行任何业务逻辑,除了从数据库检索模型之外。

FuelPHP - 简单的 Web 应用程序

在本章中,我们将了解如何在 FuelPHP 框架中创建一个简单的应用程序。如前所述,您知道如何在 Fuel 中创建新项目。我们可以举一个员工详细信息的例子。

首先,我们使用以下命令创建一个名为 Employee 的项目。

oil create employee

执行命令后,将创建一个具有以下文件结构的员工项目-

employee 
├── CHANGELOG.md 
├── composer.json 
├── composer.lock 
├── composer.phar 
├── CONTRIBUTING.md 
├── fuel 
│   ├── app 
│   │   ├── bootstrap.php 
│   │   ├── cache 
│   │   ├── classes 
│   │   ├── config 
│   │   ├── lang 
│   │   ├── logs 
│   │   ├── migrations 
│   │   ├── modules 
│   │   ├── tasks 
│   │   ├── tests 
│   │   ├── themes 
│   │   ├── tmp 
│   │   ├── vendor 
│   │   └── views 
│   ├── core 
│   │   ├── base56.php 
│   │   ├── base.php 
│   │   ├── bootstrap.php
│   │   ├── bootstrap_phpunit.php 
│   │   ├── classes 
│   │   ├── composer.json 
│   │   ├── config 
│   │   ├── CONTRIBUTING.md 
│   │   ├── lang 
│   │   ├── phpunit.xml 
│   │   ├── tasks 
│   │   ├── tests 
│   │   ├── vendor 
│   │   └── views 
│   ├── packages 
│   │   ├── auth 
│   │   ├── email 
│   │   ├── oil 
│   │   ├── orm 
│   │   └── parser 
│   └── vendor 
│       ├── autoload.php 
│       ├── composer 
│       ├── fuelphp 
│       ├── michelf 
│       ├── monolog 
│       ├── phpseclib 
│       └── psr 
├── LICENSE.md 
├── oil 
├── public 
│   ├── assets 
│   │   ├── css 
│   │   ├── fonts 
│   │   ├── img 
│   │   └── js 
│   ├── favicon.ico 
│   ├── index.php 
│   └── web.config 
├── README.md 
└── TESTING.md  
42 directories, 21 files

应用程序的结构

FuelPHP 框架提供了组织良好的应用程序结构。让我们检查一下应用程序的一些重要文件和文件夹。

  • Fuel - 包含所有 PHP 文件。

  • public - 包含通过浏览器直接访问的所有资源,例如 JavaScript、CSS、图像等。

  • oil - 用于运行命令行任务的可执行文件,例如在应用程序中生成代码或交互式调试。这是可选的。

  • Fuel/app/ - 包含所有特定于应用程序的 PHP 文件。它包含模型、视图和控制器。

  • Fuel/core/ - 这是 Fuel 框架本身所在的位置。

  • Fuel/packages/ - 包含所有燃料包。默认情况下,fuel 将包含三个包:oil、auth 和 orm。除非您需要,否则不会加载这些包。

  • Fuel/app/config/ - 包含所有与应用程序相关的配置文件。主应用程序配置文件 config.php 文件位于此处。

  • Fuel/app/classes/ - 包含所有特定于应用程序的基于 MVC 的 PHP 文件。它包含控制器、模型、辅助类、库等。

  • Fuel/app/classes/controller/ - 控制器放置在此处。

  • Fuel/app/classes/model/ - 模型放置在这里。

  • Fuel/app/views/ - 包含视图文件。视图没有特定的命名约定。

添加控制器

如前所述,FuelPHP 基于模型-视图-控制器 (MVC) 开发模式。MVC 是一种将应用程序逻辑与表示分离的软件方法。在MVC模式中,控制器扮演着重要的角色,应用程序中的每个网页都需要由控制器来处理。默认情况下,控制器位于Fuel/app/classes/controller/文件夹中。您可以在此处创建自己的控制器类。

移动到位置fuel/app/classes/controller/ 并创建employee.php 文件。要创建一个新的控制器,只需扩展 FuelPHP 提供的 Controller 类,定义如下。

员工.php

<?php 
   class Controller_Employee extends Controller { 
      public function action_home() { 
         
         // functionality of the home page  
         echo "FuelPHP-Employee application!"; 
      } 
   }

现在,我们创建了一个 Employee Controller 并添加了一个公共方法,action_home,它打印一个简单的文本。

路由

路由将网页 URI 解析为特定的控制器和操作。FuelPHP 应用程序中的每个网页都应该在控制器实际执行之前经过路由。默认情况下,每个控制器都可以使用以下 URI 模式进行解析。

<controller>/<action>

在哪里,

  • 控制器是控制器的名称减去命名空间、员工

  • action是方法名减去action_关键字,home

可以通过http://localhost:8080/employee/home访问新创建的控制器,它将产生以下结果。

结果

员工申请

FuelPHP - 配置

在本章中,我们将了解如何配置 FuelPHP 应用程序。默认情况下,配置文件存储在fuel/app/config文件夹中。应用程序的主要配置是fuel/app/config/config.php。该配置是使用 PHP 的关联数组指定的。

概述

默认情况下,所有默认配置文件都定义在fuel/core/config文件夹中。要覆盖默认配置,请在/fuel/app/config/config.php文件中添加相应的键并修改值。我们可以使用“点表示法”来简化多维数组。例如,以下配置具有相同的目的(加载指定的包)。

array("always_load" => array("packages" => array( ... ) ) ); 
always_load.packages = array( ... );

配置可以按用途分组并使用不同的文件指定,例如用于数据库配置的 db.php、用于包管理的 package.php 等。

配置格式类型

FuelPHP 非常灵活,提供不同的格式来指定配置。默认配置格式是使用 php 数组的 PHP。其他选项是 -

INI - 简单的基于文本的配置,受许多软件支持,包括 PHP 语言本身。

[group]
key = value

YAML - 易于理解、基于缩进且人类可读的配置管理。

group:
   key: value

JSON - 易于理解且开发人员最常用的文件格式。

{ 
   "group" : 
   { 
      "key": "value" 
   } 
} 

Memcached - 将配置存储在 memcached 服务器中。memcached 服务器详细信息可以使用config.memcached条目在主配置文件fuel/app/config/config.php中指定。

DB - 将配置存储在 RDBMS 系统中。配置表的表结构如下。

CREATE TABLE IF NOT EXISTS `config` ( 
   `identifier` char(100) NOT NULL, 
   `config` longtext NOT NULL, 
   `hash` char(13) NOT NULL, 
   PRIMARY KEY (`identifier`) 
)

可以使用config.databaseconfig.table_name条目在配置文件中指定数据库和表的详细信息。

环境

环境通过加载不同的配置使FuelPHP能够在不同的模式下工作。FuelPHP 支持以下环境。

  • 开发- \Fuel::DEVELOPMENT 设置开发模式

  • 生产- \Fuel::Production 设置生产模式

  • 测试- \Fuel::TEST 设置测试模式

  • Staging - \Fuel::STAGING 设置暂存模式

FuelPHP 还支持创建新环境。这将使每个开发人员都能够拥有自己的配置设置,并且他们可以在编码和测试应用程序时启用它。只需创建一个具有环境名称(例如:test)的文件夹并将配置文件放入新创建的文件夹中即可添加特定环境的配置,如下所示。

. ├── config.php 
├── db.php 
├── development 
│   └── db.php 
├── production 
│   └── db.php 
├── routes.php 
├── staging 
│   └── db.php
└── test 
    └── db.php  
4 directories, 7 files

设置您的环境

可通过三种方式设置您的环境。

选项 1 - 使用 Web 服务器的环境变量设置环境。在Apache Web 服务器的httpd.conf文件的虚拟主机部分添加以下代码。它也可以添加到.htaccess文件中。

SetEnv FUEL_ENV production

选项 2 - 使用 FuelPHP 引导文件/fuel/app/bootstrap.php设置环境

Fuel::$env = (isset($_SERVER['FUEL_ENV']

选项 3 - 使用油设置环境

$ env FUEL_ENV = production php oil -v

它产生以下结果。

Fuel: 1.8 running in "production" mode

FuelPHP - 控制器

控制器负责处理进入 FuelPHP 应用程序的每个请求。根据 FuelPHP 的说法,控制器位于Fuel/app/classes/controller/。让我们首先创建一个员工控制器。

员工.php

<?php  
   class Controller_Employee extends Controller { 
      public function action_home() { 
         echo "FuelPHP-Employee application!"; 
      }  
      
      public function action_index() { 
         echo "This is the index method of employee controller"; 
      } 
   } 

控制器方法

控制器通过使用其action_方法之一来处理 Web 请求。我们可以根据应用程序的要求创建尽可能多的action_方法。默认的action_方法是action_indexaction_index方法可以由以下任一 URL 调用。

http://localhost:8080/employee/index
http://localhost:8080/employee/

结果

员工控制员

让我们在员工应用程序中创建一个新的操作方法,action_show

<?php  
   class Controller_Employee extends Controller { 
      public function action_home() { 
         echo "FuelPHP-Employee application!"; 
      }  
      public function action_index() { 
         echo "This is the index method of employee controller"; 
      }  
      public function action_show() { 
         echo "This is the show method of employee controller"; 
      } 
   } 

可以使用以下 URL 调用action_show方法。

http://localhost:8080/home/show

结果

显示方法

before() 方法

我们可以在控制器之前创建一个方法。该方法将在每次action_方法调用之前执行。如果该方法不存在,则不会调用它。该方法帮助我们编写常见的操作,例如登录检查、默认数据获取等。

让我们创建一个before方法并打印一条简单的文本消息。

public function before() { 
   echo "This message comes from <em>before()</em> method</br>"; 
} 

包含之前操作的索引页

行动前索引

显示包含之前操作的页面

行动前显示

after() 方法

after()方法与before()方法类似,但在调用action_方法之后执行。after()方法将响应作为输入并返回响应对象。

public function after($response) { 
   if ( ! $response instanceof Response) { 
      $response = \Response::forge($response, $this->response_status); 
   } 
   return $response; 
} 

如果输入为 NULL 或不是响应对象,则使用 Response 的 forge 方法创建一个新的Response对象并返回它。我们将在后续章节详细学习Response类。

扩展控制器

我们可以从一个控制器扩展另一个控制器。以下是基本语法。

class Controller_Employee extends Controller_Welcome { 
   // controller methods 
} 

这将有助于共享方法。

生成控制器

Fuel 可以选择使用 Oil 命令生成控制器。以下是语法。

句法

oil g controller <controller-name> 

例子

oil g controller sample

执行上述命令后,您将看到以下响应。

结果

Creating view: /path/to/project/fuel/app/views/template.php 
Creating view: /path/to/project/fuel/app/views/sample/index.php 
Creating controller: /path/to/project/fuel/app/classes/controller/sample.php 

控制器类型

FuelPHP 为不同的目的提供了不同类型的控制器。它们如下 -

  • 底座控制器
  • 模板控制器
  • 休息控制器
  • 混合控制器

基础控制器

Controller 是 FuelPHP 中可用的所有不同类型控制器的基本控制器。它提供了处理 Web 请求所需的所有基本功能。它支持请求、响应、会话等。除非另有说明,我们将在所有示例中使用它。

模板控制器

模板控制器是基本控制器的扩展。它具有模板支持、预定义的 before() 和 after() 方法。基本上,它可以用来将视图包装在带有页眉、页脚、侧边栏等的布局中。要创建模板控制器,我们需要扩展 Controller_Template默认情况下,扩展Controller_Template的类的所有方法都需要使用该模板。

它的定义如下。

class Controller_Employee extends Controller_Template { 
   public function action_index() { 
      // add methods 
   } 
}

我们将在视图章节中讨论更多有关模板控制器的内容。

休息控制器

休息控制器是基本控制器的扩展。它预先定义了对 REST API 编程的支持。这将使您能够轻松构建 API。

要创建休息控制器,您需要扩展Controller_Rest类。它的定义如下。

class Controller_Employee extends Controller_Rest { 
   public function action_index() { 
      // add methods 
   } 
}

我们将在 Ajax 章节中详细讨论剩余控制器。

混合控制器

混合控制器在单个基本控制器中执行 REST 控制器和模板控制器的功能。

FuelPHP - 路由

路由映射向特定控制器的方法请求 URI。在本章中,我们将详细讨论 FuelPHP 中的路由概念。

配置

路由配置文件位于fuel/app/config/routes.php。默认的routes.php文件定义如下 -

<?php 
   return array ( 
      '_root_'  => 'welcome/index',   // The default route 
      '_404_'   => 'welcome/404',     // The main 404 route 
      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   );

这里,_root_是预定义的默认路由,当应用程序请求根路径时,将匹配该路由, / 例如http://localhost:8080/_root_的值是控制器和匹配时要解析的操作。welcome/index解析为Controller_Welcome控制器和action_index操作方法。同样,我们还有以下预留航线。

  • root - 未指定 URI 时的默认路由。

  • 403 - 当发现 HttpNoAccessException 时抛出。

  • 404 - 当找不到页面时返回。

  • 500 - 当发现 HttpServerErrorException 时抛出。

简单路由

将该路由与请求 URI 进行比较。如果找到匹配项,则请求将路由到 URI。简单路由描述如下,

return array ( 
   'about'  => 'site/about', 
   'login' => 'employee/login', 
);

这里,about匹配 http://localhost:8080/about 并解析控制器、Controller_Site 和操作方法、action_about

login匹配 http://localhost:8080/login 并解析控制器 Controller_Login 和操作方法 action_login

高级路由

您可以将任何正则表达式包含到您的路线中。Fuel 支持以下高级路由功能 -

  • :any - 匹配 URI 中该点之后的任何内容,不匹配“无”

  • :everything - 与 :any 类似,但也匹配“nothing”

  • :segment - 这只匹配 URI 中的 1 个段,但该段可以是任何内容

  • :num - 匹配任何数字

  • :alpha - 匹配任何字母字符,包括 UTF-8

  • :alnum - 匹配任何字母数字字符,包括 UTF-8

例如,以下路由匹配 URI http://localhost:8080/hello/FuelPHP并解析控制器、Controller_Welcome和操作action_hello

'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),

Controller_Welcome中对应的action方法如下,

public function action_hello() { 
   $this->name = Request::active()->param('name', 'World'); 
   $message = "Hello, " . $this->name;  
   echo $message; 
}

在这里,我们使用 Request 类从 URL 中获取名称参数。如果未找到该名称,则我们将使用World作为默认值。我们将在请求响应章节中学习Request类。

结果

欢迎控制器

HTTP 方法 操作

FuelPHP 支持路由来匹配 HTTP 方法前缀操作。以下是基本语法。

class Controller_Employee extends Controller { 
   public function get_index() { 
      // called when the HTTP method is GET. 
   }  
   public function post_index(){ 
      // called when the HTTP method is POST. 
   } 
}

我们可以根据配置文件中的 HTTP 动词将您的 URL 路由到控制器和操作,如下所示。

return array ( 
   // Routes GET /employee to /employee/all and POST /employee to /employee/create 
   ‘employee’ => array(array('GET', new Route(‘employee/all')), array('POST', 
      new Route(‘employee/create'))), 
);

FuelPHP - 请求与响应

HTTP 请求和 HTTP 响应在任何 Web 应用程序中都发挥着重要作用。我们需要获取 http 请求的完整详细信息才能正确处理它。处理完成后,我们需要将处理后的数据通过http响应发送给客户端。

FuelPHP提供了优秀的RequestResponse类来分别读取和写入HTTP请求和HTTP响应。让我们在本章中了解RequestResponse类。

要求

在典型的 Web 应用程序中,应用程序需要解析当前请求的详细信息。Request类提供了简单的方法来解析当前要由应用程序处理的请求。Request还提供了一个通过充当 http 客户端来创建新请求的选项。

创建新请求使应用程序能够请求应用程序的其他部分或完全另一个应用程序并显示结果。让我们在本章中学习如何解析传入请求,并在 HMVC 请求章节中学习如何创建新请求。

解析请求

Request类提供了三种方法来获取http请求的详细信息。它们如下:

active - 它是一个静态方法,返回当前活动的 http 请求。

$currentRequest = Request::active();

param – 返回指定参数的值。它包含两个参数。第一个参数是参数名称,第二个参数是要返回的值(如果该参数在当前 http 请求中不可用)。

$param = Request::active()->param('employee_name', 'none');

params – 它与 param 相同,只是它以数组形式返回所有参数。

$params = Request::active()->params();

例子

让我们创建一个简单的表单并使用请求类处理该表单。

步骤 1 -在员工控制器中创建一个新操作action_request 。

public function action_request() { 
}

步骤 2 - 调用请求方法以获取当前请求的所有参数。

public function action_request() { 
   $params = Request::active()->params(); 
}

步骤 3 - 转储获取的参数数组。

public function action_request() { 
   $params = Request::active()->params();  
   echo dump($params); 
}

步骤 4 - 更改路由以将参数包含在路由配置文件Fuel/app/config/routes.php中

'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),

现在,请求新操作http://localhost:8080/employee/request/Jon,它将显示以下响应。

解析请求

回复

响应类提供了创建 http 响应的选项。默认情况下,大多数情况下我们不需要直接使用响应类。相反,我们使用View(我们将在下一章中学习)来创建 http 响应。View 对开发人员隐藏 http 响应,并使用底层Response类将响应发送到客户端。在高级情况下,我们直接使用Response类并创建完整的 http 响应。

创建响应

响应由标头和正文组成。主要标头是http 状态代码。HTTP状态码是HTTP协议中定义的用于描述响应的标准代码。例如状态码,200表示请求成功。

Response 类提供三个参数来创建 http 响应,

  • $body - http 响应的正文

  • $status_code - http 响应的状态代码

  • $headers - 可选标头作为数组

$body = "Hi, FuelPHP"; 
$headers = array ( 
   'Content-Type' => 'text/html', 
); 
$response = new Response($body, 200, $headers);

让我们在员工控制器中创建一个新操作action_response ,如下所示。

public function action_response() { 
   $body = "Hi, FuelPHP"; 
   $headers = array ('Content-Type' => 'text/html',); 
   $response = new Response($body, 200, $headers); 
   
   return $response; 
}

结果

行动响应

方法

Response 类提供了很多操作 http 响应的方法。它们如下:

forge - 它与上面看到的响应类构造函数相同。

return Response::forge("Hi, FuelPHP", 404);

重定向- 它提供了重定向到 URL 而不是发送响应的选项。它包含以下参数,

a.url - 目标 url b. 方法 - 重定向方法。位置(默认)并刷新 c。redirect_code - http 状态代码。默认值为 302。

// use a URL 
Response::redirect('http://some-domain/index', 'refresh');  

// or use a relative URI 
Response::redirect('employee/list'); 

redirect_back - 它与重定向方法类似,只是它重定向到上一页。如果没有可用的后页,我们可以指定重定向页面。

// If there is no back page, go to the employee list page 
Response::redirect_back('/employee/list', 'refresh');

set_status - 它提供了设置http状态代码的选项。

$response = new Response(); 
$response->set_status(404); 

set_header - 它提供了设置http标头的选项。

$response = new Response(); 
$response->set_header('Content-Type', 'application/pdf');  

// replace previous value using third arguments 
$response->set_header('Content-Type', 'application/pdf', 'text/plain'); 

set_headers - 它与set_header相同,只是它提供了使用数组设置多个标头的选项。

$response = new Response(); 
$response->set_headers (array 
   'Content-Type' => 'application/pdf', 
   'Pragma' => 'no-cache', 
)); 

get_header - 它可以获取先前设置的标头详细信息。

$response = new Response(); 
$response->set_header('Pragma', 'no-cache');  

// returns 'no-cache' 
$header = $response->get_header('Pragma');  

// returns array('Pragma' => 'no-cache') 
$header = $response->get_header();

body - 它提供了一个设置 http 响应正文的选项。

$response = new Response(); 
$response->body('Hi, FuelPHP');  

// returns 'Hi, FuelPHP' 
$body = $response->body();

send_headers - 将标头发送到请求的客户端。FuelPHP 使用此方法将响应发送到客户端。一般情况下,我们不需要使用这个方法。

$response->send_headers();

send - 与send_headers相同,除了标头可能在http响应中受到限制。

// send the headers as well 
$response->send(true);  

// only send the body 
$response->send(false); 
$response->send(); 

FuelPHP - 视图

视图是 MVC 应用程序的表示层。它将应用程序逻辑与表示逻辑分开。当控制器需要生成 HTML、CSS 或任何其他内容时,它将任务转发给视图引擎。

FuelPHP 提供了一个简单而灵活的类 View,它具有视图引擎的所有必要功能。View类支持视图文件的渲染。查看文件是一个嵌入了 PHP 指令的 HTML 页面。视图文件的变量可以使用 View 类作为 PHP 数组进行设置,并使用数组的键在视图文件中引用。让我们检查一下 View 类的一些重要方法。

锻造

  • 目的- 创建一个新的视图对象

  • 参数- 以下是参数

    • $file - 视图文件相对于视图文件夹的路径,fuel/app/views

    • $data - 值数组

    • $filter - 设置自动编码,默认为主配置文件中的设置

  • 返回- 视图的实例

例如,

$view = View::forge ('path/to/view', array( 
   'title' => "Show employee, 
   'employees' => $employees, 
));

自动过滤器

  • 目的- 设置是否对数据进行编码

  • 参数- 以下是参数

    • $filter - 真/假

  • 返回- 当前视图对象

例如,

$view->auto_filter(); 
$view = $view->auto_filter(false);

设置文件名

  • 用途- 允许设置或更改视图文件。

  • 参数- 以下是参数 -

    • $file - 相对于视图文件夹、fuel/app/views 的视图文件路径

  • 返回- 当前视图对象

例如,

$view = new View();
$view>set_filename('path/to/view');

  • 目的- 设置一个或多个变量的值

  • 参数- 以下是参数

    • $key - 变量名称或值数组

    • $value - 值 / null

    • $filter - 编码设置,true / false

  • 返回- 当前视图对象

例如,

$view = new View(); 
$view->set(array('name' => 'Jon'));

设置全局

set_global 与set类似,不同之处在于它适用于所有视图并且所有视图都可以访问变量。这是一个静态方法。

View::set_global('name', 'Jon', false);

设置安全

  • 目的- 设置一个或多个启用安全编码的变量的值。

  • 参数- 以下是参数 -

    • $key - 变量名称或值数组

    • $value - 值 / null

  • 返回- 当前视图对象

例如,

$view = new View(); 
$view->set_safe(array('name' => 'Jon'), null); 

得到

  • 目的- 获取一个或多个变量的值

  • 参数- 以下是参数

    • $key - 变量名称

    • $default - 如果找不到密钥则返回默认值

  • 返回- 输入键的值

例如,

$view = new View(); 
$name = $view>get('name');  // name = 'Jon'

使成为

  • 目的- 通过将视图文件与局部和全局变量合并来将视图文件渲染为字符串

  • 参数- 以下是参数 -

    • $file - 视图文件名

  • 返回- 呈现的视图文件作为字符串

例如,

$html = View::forge()->render('/path/to/view');

创建视图

为了理解视图,让我们修改操作方法,控制器的action_show , Controller_Employee

员工.php

<?php  
   class Controller_Employee extends Controller { 
      public function action_show() {
         return View::forge('employee/show'); 
      } 
   }

现在在views目录中创建一个文件夹employee,位于fuel/app/views。然后,在employee文件夹中创建一个文件show.php并添加以下代码。

显示.php

<h3> My first view </h3>

现在,请求 URL http://localhost:8080/employee/show,它会产生以下结果。

显示视图

将数据传递给视图

我们可以使用前面讨论的 View 方法将数据传递到视图。下面是一个简单的例子。

员工.php

class Controller_Employee extends Controller { 
   public function action_show() { 
      $data = array(); //stores variables going to views 
      $data['name'] = ‘Jon’; 
      $data[‘job’] = ‘Designer’;  
      
      //assign the view to browser output 
      return View::forge('employee/show', $data); 
   } 
}

现在,在视图文件中添加更改。

显示.php

<html> 
   <body> 
      Hello, <?php echo $name; ?>. 
      Your job is, <?php echo $job; ?>. 
   </body> 
</html>

请求 URL 后,它将显示名称和职位,如下所示 -

传递查看请求

查看过滤器

视图使用输出编码来传递您想要的任何内容。如果要传递未过滤的数据,我们可以使用set方法。

员工.php

class Controller_Employee extends Controller { 
   public function action_show() { 
      $view = \View::forge('employee/show'); 
      $view->set('name', 'Jon', true); 
      $view->set('job', '<em>Designer</em>', false); 
      return $view; 
   } 
}   

请求URL后,将以强调方式显示职位详细信息,如下。

查看过滤器

嵌套视图

FuelPHP 支持嵌套视图。在嵌套视图中,一个视图可以包含一个或多个视图。要在另一个视图中设置视图,我们可以使用 render 方法,如下所示。

员工.php

class Controller_Employee extends Controller { 
   public function action_nestedview() { 
      
      //assign variables 
      $data = array(); 
      $data['title'] = 'Home';  
      $data['name'] = 'Jon'; 
      $data['job'] = 'Designer';  
      $views = array(); 
      $views['head'] = View::forge('head', $data)->render(); 
      $views['content'] = View::forge('employee/show', $data)->render();  
      return View::forge('layout', $views, false)->render(); 
   } 
}

燃料/应用程序/视图/layout.php

<html> 
   <head> 
      <?php echo $head; ?> 
   </head> 
   
   <body> 
      <?php echo $content; ?> 
   </body> 
</html> 

燃料/应用程序/视图/head.php

<title>
   <?php echo $title; ?>
</title> 

燃料/应用程序/视图/员工/show.php

Hello, <?php echo $name; ?>. 
Your job is, <?php echo $job; ?>.

请求 URL http://localhost:8080/employee/nestedview并检查源视图后,它给出以下代码。

<html> 
   <head> 
      <title>Home</title> 
   </head> 
   
   <body> 
      Hello, Jon. 
      Your job is, Designer. 
   </body> 
</html>

模板控制器

FuelPHP 提供了一个具有内置布局概念的控制器 Controller_Template。布局概念是使用控制器的before()after()方法完成的。要使用模板控制器,我们需要使用Controller_Template而不是Controller来扩展控制器。在使用after() / before()方法时,我们需要调用parent::before和parent::after,否则模板会崩溃。

<?php 
   class Controller_Test extends Controller_Template { 
      public function before() { 
         parent::before(); 
         // do stuff 
      } 
        
      public function after($response) { 
         $response = parent::after($response); 
         
         // do stuff 
         return $response; 
      } 
   }

模板.php

它是 Fuel 中的默认模板文件。模板文件用于调用JS、CSS、HTML,以及调用视图部分。它位于Fuel/app/views/。模板用于将视图包装在带有页眉、页脚、侧边栏等的布局中。我们可以在操作方法中使用 $template 变量更改默认模板,如下所示。

燃料/应用程序/类/控制器/test.php

<?php  
   class Controller_Test extends Controller_Template { 
      public $template = 'template_test'; 
      public function action_index() { 
         $this->template->title = 'Example Page'; 
         $this->template->content = View::forge('test/index'); 
      } 
   } 

燃料/应用程序/视图/template_test.php

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title><?php echo $title; ?></title> 
      <?php echo Asset::css('bootstrap.css'); ?> 
   </head> 

   <body> 
      <div> 
         <?php echo $content; ?>
      </div> 
   </body> 
</html> 

燃料/应用程序/视图/测试/index.php

<h3>My Test page</h3>

现在,请求 URL http://localhost:8080/test,它会产生以下结果。

结果

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title>Example Page</title> 
      <link type = "text/css" rel = "stylesheet" 
         href = "http://localhost:8080/assets/css/bootstrap.css?1464964766" />
   </head> 
   
   <body> 
      <div> 
         <h3>My Test page</h3> 
      </div> 
   </body> 
</html>

生成视图页面

您可以使用 Fuel 的 Oil 控制台生成视图页面。以下是基本语法。

oil g controller <controller-name> <page1> <page2> ..

要生成具有主页和登录页面的管理控制器,请使用以下命令。

oil g controller admin home login

结果

Creating view: /path/to/app/fuel/app/views/admin/home.php 
Creating view: /path/to/app/fuel/app/views/admin/login.php 
Creating controller: /path/to/app/fuel/app/classes/controller/admin.php

FuelPHP - 演讲者

FuelPHP 在控制器之后提供了一个附加层来生成视图。一旦控制器处理输入并完成业务逻辑,它会将控件发送到 Presenter ,Presenter负责处理额外的逻辑,例如从数据库获取数据、设置视图数据等,然后调用 View目的。

我们可以使用 Presenter 类渲染视图,如下所示 -

燃料/应用程序/类/控制器/employee.php

public Controller_Employee extends Controller { 
   public function action_welcome() { 
      return Presenter::forge('employee/hello'); 
   } 
}

Presenter 类的默认位置是Fuel/app/classes/presenter/。下面是一个简单的例子。

燃料/应用程序/类/演示者/员工/hello.php

<?php  
   class Presenter_Employee_Hello extends Presenter { 
      public function view() { 
         $this->name = Request::active()->param('name', 'World'); 
      } 
   } 

上述演示者类的视图文件解析为相对于views文件夹的employee/hello.php,这是指定的。

燃料/应用程序/视图/员工/hello.php

<h3>Hi, <?php echo $name; ?></h3> 

最后,更改路线以匹配员工的欢迎动作,如下所示 -

燃料/应用程序/配置/routes.php

'employee/hello(/:name)?' => array('employee/welcome', 'name' => 'hello'), 

现在,请求 URL http://localhost:8080/employee/hello/Jon会呈现以下结果。

结果

演示者视图

FuelPHP - 模型和数据库

模型在 FuelPHP Web 框架中发挥着重要作用。它代表应用程序的业务实体。它们要么由客户提供,要么从后端数据库获取,根据业务规则进行操作并保留回数据库中。让我们在本章中了解模型以及它们如何与后端系统交互。

创建模型

在 FuelPHP 中,模型只是扩展内置 Model 类的普通 PHP 类。默认情况下,模型可能以类似于控制器的 Model_ 为前缀,并且应放置在Fuel/app/classes/model/文件夹中。让我们创建一个基本的员工模型并在我们继续进行时对其进行扩展。

燃料/应用程序/类/模型/employee.php

<?php 
   namespace Model; 

   class Model_Employee extends \Model { 
      public static function fetchAll() { 
         // Code to fetch employee from database 
      } 
   }

访问模型

一旦定义了模型,只需将其包含在控制器中即可在任何控制器中自由使用,如下所示。

use \Model\Employee; 

class Controller_Employee extends Controller { 
   public function action_index() { 
      $employees = Employee::fetchAll(); 
   } 
}

数据库概述

FuelPHP 提供了自己的数据库抽象层来从数据库中获取数据。它提供了基于 ORM 的基本工具和高级工具。基本工具包由基于 DB、DBUtil 和 Query_Builer 的类组成。高级工具包是Orm。Orm 工具包源自基础工具包,并作为单独的包捆绑在一起。

数据库配置

FuelPHP 将数据库设置与主配置文件分开,该文件是Fuel/app/config/db.php。它支持每个环境的单独设置。目前,FuelPHP 支持 MySQL、MySQLi 和 PDO 驱动程序。示例设置如下 -

<?php  
   return