创建、读取、更新和删除 (CRUD) 是应用程序中数据对象的四种基本操作。由于在开发 Web 应用程序时实现 CRUD 操作的任务非常普遍,Yii 在名为 *Gii* 的名称下提供了一些代码生成工具,这些工具可以自动执行此过程(也称为 *脚手架*)供我们使用。
注意: Gii 从版本 1.1.2 开始可用。在此之前,您需要使用 yiic shell 工具 来完成相同的任务。
在下面,我们将描述如何使用此工具在我们的博客应用程序中实现帖子和评论的 CRUD 操作。
我们首先需要安装 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
中先前设置的密码,我们应该看到一个页面,其中列出了所有可用的代码生成工具。
注意: 在生产环境中运行时,应删除上面的代码。代码生成工具仅应在开发环境中使用。
我们首先需要为每个数据库表创建一个 模型 类。模型类将允许我们以直观的面向对象的方式访问数据库,正如我们将在本教程中看到的那样。
单击 模型生成器
链接开始使用模型生成工具。
在 模型生成器
页面上,在 表名
字段中输入 tbl_user
(用户表名),在 表前缀
字段中输入 tbl_
,然后按 预览
按钮。将出现一个预览表。我们可以单击表中的链接来预览要生成的代码。如果一切正常,我们可以按 生成
按钮生成代码并将其保存到文件中。
信息: 由于代码生成器需要将生成的代码保存到文件中,因此 Web 进程需要有权限创建和修改相应的文件。为简单起见,我们可以赋予 Web 进程对整个
/wwwroot/blog
目录的写入权限。请注意,这仅在开发环境中使用Gii
时需要。
对其余数据库表重复相同的步骤,包括 tbl_post
、tbl_comment
、tbl_tag
和 tbl_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
数据库表。创建模型类后,我们可以使用 CRUD 生成器
生成实现这些模型的 CRUD 操作的代码。我们将对 Post
和 Comment
模型执行此操作。
在 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.php
和 views/post/update.php
中的局部视图文件。它显示用于收集帖子信息的 HTML 表单。views/post/_view.php
是 views/post/index.php
使用的局部视图文件。它显示单个帖子的简要视图。views/post/_search.php
是 views/post/admin.php
使用的局部视图文件。它显示一个搜索表单。我们可以通过访问以下 URL 来测试我们刚刚生成的代码实现的功能
http://www.example.com/blog/index.php?r=post http://www.example.com/blog/index.php?r=comment
请注意,由生成的代码实现的帖子和评论功能是完全独立的。此外,在创建新帖子或评论时,我们需要输入信息,例如 author_id
和 create_time
,这些信息在实际应用中应该由程序设置。别担心。我们将在接下来的里程碑中解决这些问题。就目前而言,我们应该相当满意,因为这个原型已经包含了我们为博客应用程序实现所需的大部分功能。
为了更好地理解以上文件是如何使用的,我们将在下面显示当显示帖子列表时在博客应用程序中发生的流程
http://www.example.com/blog/index.php?r=post
;PostController
的实例并执行它;PostController
实例通过调用其 actionIndex()
方法执行 index
操作。请注意,如果用户没有在 URL 中指定要执行的操作,则 index
是默认操作;actionIndex()
方法查询数据库以返回最近帖子的列表;actionIndex()
方法使用帖子数据呈现 index
视图。发现错字或您认为此页面需要改进?
在 github 上编辑它 !
对于那些无法 CRUD 帖子和评论的人
我在执行 "crud Post" 和 "crud Comment" 时卡在了脚手架部分。
我意识到我的模型文件夹中有 "tblPost" 和 tlbComment",而不是 "Post" 和 "Comment"。我忘记在 config/main.php 文件中的 components db 数组部分添加 'tablePrefix'=>'tbl_',如本博客教程的上一章中所述
https://yiiframework.cn/doc/blog/prototype.database
如果您有该 'tablePrefix'=>'tbl_' 行,那么它将在通过 "model *" 命令生成模型时从表名中删除 "tbl_" 前缀。
您也可以在 Qiang 对另一个忘记在他们的 config/main.php 文件中添加 tablePrefix 行的人的回复中阅读这一点。
https://yiiframework.cn/forum/index.php?/topic/7545-help-yii-configuration-on-mac/page__view__findpost__p__38330
也许可以在本博客教程的这一章中添加一个关于此的提醒,因为如果其他人忘记编辑他们的 main.php 文件,他们也可能会遇到此问题。
在 yii-1.0.6.r1102 上的 webapp 问题
我正在尝试运行 shell 并创建模型。
在 cmd 下出现错误
致命错误:无法重新声明类 Yii 在 path-to-app\lib\yii-1.0.6.r1102\framework\yii.php 的第 29 行
我做错了什么?
YII 如何确定在表单中标记的必填字段
如果您好奇为什么在帖子或评论的网页表单上某些字段旁边会显示“必需”星号 (*),这是由您导入以创建博客数据库的 SQL 文件中的数据结构决定的。在 MySQL 的情况下,数据库中任何定义为 NOT NULL 关键字的字段都会在表单中转换为 REQUIRED 字段。
请注册或登录以发表评论。