Yii PHP 框架入门 - 第 2 部分
关于 Yii
Yii是一个高性能的 PHP 面向对象框架,可帮助您快速构建 Web 应用程序。其设计方式让您可以专注于使应用程序独一无二的因素,而它则负责处理更“无聊”的代码定义任务。它遵循 MVC 模式,将逻辑与表示完全分离,并且具有相当多的安全增强功能。
在本教程中,我们继续上次在 VPS 上安装 Yii 框架并创建第一个应用程序时开始的工作。如果您还记得的话,我们还进行了一些 URL 清理配置,并链接了应用程序要使用的 MySQL 数据库。
现在,我们将使用 Yii 提供的一些代码生成工具来为我们的数据设置第一个模型。然后,我们将生成 CRUD 操作的代码。最后,我们将了解典型的 Yii 应用程序工作流是如何工作的。但首先,让我们在上次连接的数据库中创建一个表来保存一些内容 - 比如说新闻。
如果您还记得的话,我们创建的数据库名为db_tutorial。让我们进入命令行并在该数据库中创建一个表。要提高执行此操作的 SQL 技能,您可以查看有关在 MySQL 和 MariaDB 中创建和使用表的文章。因此,我们需要一个名为news的表,其中包含 3 列:id(主列和自动递增列)、title 和 body。
如果您很着急,可以继续使用此命令创建表:
CREATE TABLE news (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(256), body TEXT);
无需填写,我们将使用 Yii 来很好地完成这项工作。
模型
CRUD 是 Web 应用程序必须执行的最常见任务之一。从数据库中创建、读取、更新和删除数据非常重要,通常您必须自己编写执行这些任务的所有函数。这就是 Yii 变得有趣的地方。使用基于 Web 的代码生成器Gii,我们可以自动创建基本的 CRUD 代码。那么让我们看看它是如何工作的。
要使用 Gii,首先我们需要启用它。在protected/config文件夹中的同一个main.php文件中,我们在上一个教程中对其进行了更改,您将找到需要取消注释才能启用 Gii 的代码块:
/* 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'Enter Your Password Here', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters'=>array('127.0.0.1' ,'::1'), ), */
删除注释并指定您将用来在浏览器中访问 Gii 的密码。现在,根据您安装应用程序的位置,您还需要更改 ipFilters参数。默认情况下,Gii 只能从本地主机访问。因此,如果您的服务器是远程的,则默认设置将不起作用。因此,在开发过程中,您可以将其设置为 false,然后在完成后将其恢复为原来的状态:
'ipFilters'=>false,
或者,您可以设置一个您知道要允许连接的特定 IP 地址。保存文件并转到浏览器。如果您已按照上一篇文章中有关更清洁 URL 的步骤进行操作,则应转到:
http://example.com/mysite/gii
如果没有,请转至:
http://example.com/mysite/index.php?r=gii
这将提示您输入刚刚指定的密码,然后您应该查看代码生成选项。不过,在生成 CRUD 代码之前,我们需要为我们创建的表 ( news ) 创建一个 Model 类。因此,单击Model generator并按照说明进行操作。基本上,您所要做的就是填写表名字段并按Preview。然后您可以预览代码并单击Generate。
如果收到“无法写入文件”之类的错误,请确保 Web 服务器有权写入protected/models文件夹。为此,首先通过从终端运行以下命令将文件夹的组所有权分配给www-data组(请确保您位于应用程序根文件夹中):
chown root:www-data protected/models
这将使文件夹的所有者成为root用户和www-data组。请注意,Apache 在您的站点上以www-data用户的身份运行,该用户属于www-data组。接下来,确保www-data组也可以在该文件夹中写入:
chmod 775 protected/models
CRUD(创建、读取、更新、删除)
现在我们有一个用于与News表通信的 Model 类。让我们快速生成 CRUD 代码,以实现对其中数据的操作。返回到您之前的 URL(mysite/gii),但这次选择Crud generator。在 Model class 字段中指定我们刚刚创建的 Model 名称(News),然后单击Preview和Generate。但再次确保文件夹protected/controllers和protected/views可由服务器写入(如果您还不知道如何执行此操作,请参阅上文)。
生成 CRUD 代码后,您应该会收到一条成功消息,其中包含一个尝试链接。它将带您进入一个显示新闻表中记录的页面。由于它是空的,您将找不到任何记录。不过,在右侧,您将看到一个菜单,其中包含一些用于创建和管理新闻的链接。继续尝试创建、阅读、更新和删除新闻。在“管理新闻”部分,您甚至可以使用搜索、排序和过滤功能来管理内容 - 所有这些都是“开箱即用的”。此外,您甚至可以使用 Gii 生成控制器、表单和模型类,但在本教程中我们不会讨论这些内容。
申请流程
现在我们已经了解了为应用程序中的数据生成 CRUD 代码是多么容易,让我们稍微了解一下 Yii 请求路由的工作原理。Yii 实现了模型-视图-控制器 (MVC) 设计模式,将逻辑与表示很好地分开。此外,它使用一个名为 Application 的前端控制器,该控制器收集有关用户请求的信息并将其转发给适当的控制器进行处理。那么它是如何工作的呢?无需深入研究所有细节,以下内容应该可以让您非常清楚地理解:
考虑默认的 URL 结构,无需清理(就像我们在上一个教程中所做的那样),假设用户向http://example.com/mysite/index.php?r=news/view&id=1发出请求
引导程序index.php脚本实例化Application,在urlManager组件的帮助下,该组件确定请求的控制器及其操作 - 在本例中分别是新闻(位于 NewsController 类中)和视图。 Application 创建请求的控制器的实例,然后执行操作(在本例中为actionView )。 反过来,该操作从数据库中读取 ID 为 1 的新闻模型,并将其显示在浏览器中名为show的视图中(嵌入在布局中),供用户查看。
这就是一个并不罕见的 MCV 模式,用于路由用户请求。有关概述 Yii 应用程序典型工作流程的图表以及所有流程的精确分步描述,您可以查看此页面。
结论
在本教程中,我们了解了 Yii 为何如此出色。它让您能够非常轻松地生成模型、控制器,甚至常规的 CRUD 操作功能,因此您无需担心编写所有这些代码。您只需专注于让您的应用程序执行您希望它执行的操作。