0 关注者

脚手架

创建、读取、更新和删除 (CRUD) 是应用程序中数据对象的四种基本操作。由于在开发 Web 应用程序时实现 CRUD 操作的任务非常普遍,Yii 在名为 *Gii* 的名称下提供了一些代码生成工具,这些工具可以自动执行此过程(也称为 *脚手架*)供我们使用。

注意: Gii 从版本 1.1.2 开始可用。在此之前,您需要使用 yiic shell 工具 来完成相同的任务。

在下面,我们将描述如何使用此工具在我们的博客应用程序中实现帖子和评论的 CRUD 操作。

1. 安装 Gii

我们首先需要安装 Gii。打开文件 /wwwroot/blog/protected/config/main.php 并添加以下代码

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
 
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'pick up a password here',
        ),
    ),
);

上面的代码安装了一个名为 gii 的模块,这使我们能够通过在浏览器中访问以下 URL 来访问 Gii 模块

http://www.example.com/blog/index.php?r=gii

系统将提示我们输入密码。输入我们在 /wwwroot/blog/protected/config/main.php 中先前设置的密码,我们应该看到一个页面,其中列出了所有可用的代码生成工具。

注意: 在生产环境中运行时,应删除上面的代码。代码生成工具仅应在开发环境中使用。

2. 创建模型

我们首先需要为每个数据库表创建一个 模型 类。模型类将允许我们以直观的面向对象的方式访问数据库,正如我们将在本教程中看到的那样。

单击 模型生成器 链接开始使用模型生成工具。

模型生成器 页面上,在 表名 字段中输入 tbl_user(用户表名),在 表前缀 字段中输入 tbl_,然后按 预览 按钮。将出现一个预览表。我们可以单击表中的链接来预览要生成的代码。如果一切正常,我们可以按 生成 按钮生成代码并将其保存到文件中。

信息: 由于代码生成器需要将生成的代码保存到文件中,因此 Web 进程需要有权限创建和修改相应的文件。为简单起见,我们可以赋予 Web 进程对整个 /wwwroot/blog 目录的写入权限。请注意,这仅在开发环境中使用 Gii 时需要。

对其余数据库表重复相同的步骤,包括 tbl_posttbl_commenttbl_tagtbl_lookup

提示: 我们也可以在 表名 字段中输入一个星号字符 *。这将为所有数据库表一次生成一个模型类。

在此阶段,我们将拥有以下新创建的文件

  • models/User.php 包含 User 类,该类继承自 CActiveRecord,可用于访问 tbl_user 数据库表;
  • models/Post.php 包含 Post 类,该类继承自 CActiveRecord,可用于访问 tbl_post 数据库表;
  • models/Tag.php 包含 Tag 类,该类继承自 CActiveRecord,可用于访问 tbl_tag 数据库表;
  • models/Comment.php 包含 Comment 类,该类继承自 CActiveRecord,可用于访问 tbl_comment 数据库表;
  • models/Lookup.php 包含 Lookup 类,该类继承自 CActiveRecord,可用于访问 tbl_lookup 数据库表。

3. 实现 CRUD 操作

创建模型类后,我们可以使用 CRUD 生成器 生成实现这些模型的 CRUD 操作的代码。我们将对 PostComment 模型执行此操作。

CRUD 生成器 页面上,在 模型类 字段中输入 Post(我们刚刚创建的帖子模型类的名称),然后按 预览 按钮。我们将看到将生成更多文件。按 生成 按钮生成它们。

Comment 模型重复相同的步骤。

让我们看一下 CRUD 生成器生成的文件。所有文件都在 /wwwroot/blog/protected 下生成。为了方便起见,我们将它们分为 控制器 文件和 视图 文件

  • 控制器文件

    • controllers/PostController.php 包含 PostController 类,该类是负责所有关于帖子的 CRUD 操作的控制器;
    • controllers/CommentController.php 包含 CommentController 类,该类是负责所有关于评论的 CRUD 操作的控制器;
  • 视图文件

    • views/post/create.php 是显示用于创建新帖子的 HTML 表单的视图文件;
    • views/post/update.php 是显示用于更新现有帖子的 HTML 表单的视图文件;
    • views/post/view.php 是显示帖子详细信息的视图文件;
    • views/post/index.php 是显示帖子列表的视图文件;
    • views/post/admin.php 是在带有管理命令的表格中显示帖子的视图文件。
    • views/post/_form.php 是嵌入在 views/post/create.phpviews/post/update.php 中的局部视图文件。它显示用于收集帖子信息的 HTML 表单。
    • views/post/_view.phpviews/post/index.php 使用的局部视图文件。它显示单个帖子的简要视图。
    • views/post/_search.phpviews/post/admin.php 使用的局部视图文件。它显示一个搜索表单。
    • 类似的视图文件集也为评论生成。

4. 测试

我们可以通过访问以下 URL 来测试我们刚刚生成的代码实现的功能

http://www.example.com/blog/index.php?r=post
http://www.example.com/blog/index.php?r=comment

请注意,由生成的代码实现的帖子和评论功能是完全独立的。此外,在创建新帖子或评论时,我们需要输入信息,例如 author_idcreate_time,这些信息在实际应用中应该由程序设置。别担心。我们将在接下来的里程碑中解决这些问题。就目前而言,我们应该相当满意,因为这个原型已经包含了我们为博客应用程序实现所需的大部分功能。

为了更好地理解以上文件是如何使用的,我们将在下面显示当显示帖子列表时在博客应用程序中发生的流程

  1. 用户请求 URL http://www.example.com/blog/index.php?r=post
  2. Web 服务器执行 入口脚本,它创建一个 应用程序 实例并对其进行初始化以处理请求;
  3. 应用程序创建 PostController 的实例并执行它;
  4. PostController 实例通过调用其 actionIndex() 方法执行 index 操作。请注意,如果用户没有在 URL 中指定要执行的操作,则 index 是默认操作;
  5. actionIndex() 方法查询数据库以返回最近帖子的列表;
  6. actionIndex() 方法使用帖子数据呈现 index 视图。

发现错字或您认为此页面需要改进?
在 github 上编辑它 !