Yii 2 Gii 代码生成器实战指南:从启用模块到自动生成完整 CRUD 应用
后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载Gii 是 Yii 2 官方提供的可视化代码生成器能够根据数据库表结构自动生成 Active Record 模型、查询模型、控制器与视图直接产出可运行的 CRUD增删改查功能代码。本篇指南以 Yii 2 官方入门教程docs/guide-pt-BR/start-gii.md英文版见 docs/guide/start-gii.md为主线结合当前仓库框架源码讲解如何启用 Gii、用它生成模型与 CRUD 代码、预览与覆盖已生成文件并说明 Gii 的可定制与可扩展机制。读完本文你将能在自己的 Yii 2 应用中通过寥寥几步操作为任意数据表生成一套可直接使用、可继续定制的基础业务代码。Gii 是什么Yii 2 的代码生成模块Gii 在 Yii 2 中并非独立组件而是以**模块module**的形式随应用提供。它的工作方式非常直观在浏览器中打开 Gii 页面按照页面提示填写表格名、类名等信息点击生成即可产出 PHP 代码文件。正如教程原文所述使用 Gii 自动生成代码本质上就是在 Gii 网页上按提示输入正确信息。通过本教程你将掌握四件事在应用中启用 Gii使用 Gii 生成 Active Record 类使用 Gii 生成针对某张数据表的 CRUD 操作代码定制 Gii 生成的代码。值得一提的是Yii 2 框架本身也推荐这种做法。framework/db/ActiveRecord.php 的类注释中明确指出你也可以使用 Gii 代码生成器从数据库表生成 ActiveRecord 类。这说明 Gii 生成模型正是框架官方认可的标准工作流。启动 Gii在开发环境注册 gii 模块通过 modules 属性注册模块由于 Gii 是 Yii 的模块启用它的方式就是在应用的[[yii\base\Application::modules|modules]]属性中配置它。依据应用创建方式的不同你的config/web.php中很可能已经包含如下现成代码$config [ ... ]; if (YII_ENV_DEV) { $config[bootstrap][] gii; $config[modules][gii] [ class yii\gii\Module, ]; }这段配置的含义是当应用运行在**开发环境development environment**时应用应包含一个名为gii、类为yii\gii\Module的模块。config/web.php是 Yii 2 基础模板basic template与高级模板advanced template中 Web 应用的统一配置文件位于应用根目录的config目录下。YII_ENV_DEV 环境常量从何而来上述代码能否生效取决于常量YII_ENV_DEV是否为真。查看应用的入口脚本entry scriptweb/index.php你会发现这样一行代码它本质上让YII_ENV_DEV变为truedefined(YII_ENV) or define(YII_ENV, dev);这正是 Yii 2 环境常量的定义机制。framework/BaseYii.php 中可以看到这些常量的完整定义逻辑defined(YII_ENV) or define(YII_ENV, prod); defined(YII_ENV_PROD) or define(YII_ENV_PROD, YII_ENV prod); defined(YII_ENV_DEV) or define(YII_ENV_DEV, YII_ENV dev); defined(YII_ENV_TEST) or define(YII_ENV_TEST, YII_ENV test);也就是说YII_ENV_DEV、YII_ENV_PROD、YII_ENV_TEST三个常量都由YII_ENV的取值推导而来。入口脚本将YII_ENV定义为dev于是YII_ENV_DEV为真应用进入开发模式Gii 也就随之启用。若YII_ENV未被显式定义默认值为prod生产环境此时 Gii 不会自动启用——这是一种默认安全的做法。关于环境常量的更多细节可参考 环境常量一节英文版见 docs/guide/concept-configurations.md。bootstrap 的作用让 Gii 参与应用引导配置中的$config[bootstrap][] gii;将模块 ID 加入应用的bootstrap列表。在 Yii 2 中bootstrap是应用属性之一定义于 framework/base/Application.php它列出应在应用启动引导阶段运行的组件支持应用组件 ID、模块 ID、类名、配置数组或闭包等几种形式。引导过程发生在 Application::bootstrap()应用初始化时会遍历bootstrap列表逐一实例化其中的组件若组件实现了BootstrapInterface还会调用其bootstrap()方法。Gii 正是通过这一机制在引导阶段注册自身的 URL 规则与路由从而让rgii这样的请求能够被正确解析到 Gii 模块。gii模块本身在modules属性中声明后通过 Module::getModule() 在首次访问时被懒加载实例化配置数组经Yii::createObject()创建为yii\gii\Module实例。访问 Gii 与访问 IP 限制由于上述配置你的应用处于开发模式且已启用 Gii。现在可以通过如下 URL 访问 Giihttps://hostname/index.php?rgii注意出于安全考虑如果你不是从 localhost 访问 Gii默认会被拒绝访问。你可以通过配置 Gii 的allowedIPs属性来添加允许访问的 IP 地址如下所示gii [ class yii\gii\Module, allowedIPs [127.0.0.1, ::1, 192.168.0.*, 192.168.178.20] // 请按需调整 ],allowedIPs支持通配符如192.168.0.*也支持 IPv6 回环地址::1。这是一个非常重要的安全配置Gii 能生成并写入代码文件绝不应在生产环境开放即使开发环境也建议只对可信 IP 开放。访问成功后你会看到 Gii 的首页其中列出可用的代码生成器Generator包括 Model Generator模型生成器与 CRUD Generator 等。生成 Active Record 类使用 Model Generator要使用 Gii 生成 Active Record 类请在 Gii 首页点击 Model Generator 链接然后按如下示例填写表单本例数据表为pais即国家表表名Table Namepais模型类名Model ClassPais填写完毕后点击 Preview预览按钮。你会看到models/Pais.php出现在待生成文件列表中。点击该文件名即可预览将要生成的代码内容。使用 Gii 时如果你之前已经创建过同名文件、本次操作将覆盖它可以点击文件名旁的diff按钮查看将要生成的代码与现有版本之间的差异——这对于判断是否需要覆盖非常实用。覆盖已有文件时请勾选文件名旁的 overwrite覆盖复选框然后点击 Generate生成按钮如果是创建全新文件直接点击 Generate 即可。随后你会看到确认页面提示代码已成功生成。如果此前已有同名文件还会显示该文件已被新代码覆盖的消息。生成的Pais模型类继承自yii\db\ActiveRecord包含tableName()方法返回关联的表名pais以及基于表结构推导出的属性、标签与校验规则validation rules。这正是 framework/db/ActiveRecord.php 注释中所推荐的从数据库表生成 ActiveRecord 类的标准做法生成结果开箱即用。生成 CRUD 代码使用 CRUD GeneratorCRUD 是 Create创建、Read读取、Update更新、Delete删除的缩写代表了绝大多数网站对数据执行的四种常见操作。要用 Gii 创建 CRUD 功能请在 Gii 首页点击 CRUD Generator 链接并延续 pais 示例填写如下信息模型类Model Classapp\models\Pais搜索模型类Search Model Classapp\models\PaisSearch控制器类Controller Classapp\controllers\PaisController点击 Preview 按钮后你会看到将要生成的文件列表如下所示。如果你之前已经创建过controllers/PaisController.php和views/pais/index.php这两个文件例如在本指南的数据库章节中手工创建过请勾选 overwrite 复选框将其替换旧版本不具备完整的 CRUD 支持。生成完成后Gii 会输出一份完整的控制器、搜索模型与视图文件清单全部落盘到应用对应的目录中。从生成结果看CRUD 生成器产出的是一套自洽的完整骨架控制器负责路由与动作action分发PaisSearch负责基于查询参数构建数据提供器DataProvider实现搜索与排序视图则渲染列表、详情、创建与更新表单。这套代码可以直接运行也可作为后续二次开发的基础。验证成果运行生成的应用页面生成完毕后在浏览器中访问如下 URL 来查看效果https://hostname/index.php?rpais/index你会看到一张数据网格grid展示数据库中pais表的全部国家记录。你可以对网格进行排序也可以在列标题的筛选框中输入条件进行过滤。对于网格中显示的每一行数据你都可以选择查看详情view、更新update或删除delete。此外点击网格顶部的 Create Pais新建国家按钮即可进入创建新记录的表单页面。提示官方英文版教程使用country表作为示例URL 形如https://hostname/index.php?rcountry%2Findex葡萄牙语版教程以pais表演示二者原理完全一致。r参数中的%2F是/的 URL 编码形式。如果你希望深入研究这些功能是如何实现的或想对其加以调整下面是 Gii 生成的文件清单控制器Controllercontrollers/PaisController.php模型Modelsmodels/Pais.php与models/PaisSearch.php视图Viewsviews/pais/*.php其中models/PaisSearch.php是 Gii 特有的搜索模型它继承自Pais为每个可搜索字段声明过滤器规则并提供一个search()方法把表单传入的参数转换为查询条件再交给数据提供器完成分页与排序——这是 Yii 2 网格视图GridView与数据提供器DataProvider配合实现列表筛选的标准形态。定制与扩展 Gii 生成的代码Gii 被设计为高度可定制、可扩展的代码生成工具在教程末尾以 Info 提示的形式专门强调。合理使用它能显著加速应用开发。你可以从以下几个方向进行定制修改生成产物直接编辑 Gii 生成的模型、控制器与视图文件例如补充业务校验规则、调整表单布局、为PaisSearch增加联合查询条件等。生成代码遵循 Yii 2 的标准分层模型 / 控制器 / 视图改动成本很低。调整生成参数CRUD 生成器表单中除了模型类、搜索模型类、控制器类三个必填项还提供视图路径、启用分页、表单字段等可选配置可按需调整后再生成。覆盖与 diff 审查每次重新生成时先用diff按钮对比新旧代码再决定是否勾选 overwrite避免误覆盖手工修改过的内容。了解扩展机制Gii 本身是一个可扩展的框架社区也提供了大量自定义生成器generator扩展。本仓库 framework/CHANGELOG.md 的历史记录也印证了这一点例如曾为 CRUD 生成器新增自定义生成 CRUD 控制器视图路径的能力以及将代码差异对比diff功能从框架核心拆分到 yii2-gii 扩展中相关记录见Gii Extension (yii2-gii)章节。Yii 2 中模块module的声明与懒加载机制由 framework/base/Module.php 实现modules属性中的配置数组会在getModule()首次被调用时才通过Yii::createObject()实例化。理解这一点有助于你掌握如何在应用中注册类似 Gii 的自定义模块。模块的通用概念可参考 模块章节英文版见 docs/guide/structure-modules.md入口脚本的机制见 入口脚本章节英文版见 docs/guide/structure-entry-scripts.md。小结通过本节内容你已经学会使用 Gii 自动生成实现数据库表内容完整 CRUD 功能的代码在config/web.php中按开发环境条件注册yii\gii\Module模块、通过allowedIPs控制访问来源用 Model Generator 生成 Active Record 模型类用 CRUD Generator 一键生成控制器、搜索模型与视图并借助预览与 diff 机制安全地覆盖旧文件。这套流程将开发者从繁琐的样板代码中解放出来让你把精力集中在真正有业务价值的部分——这也是 Yii 2 快速、安全、专业理念在开发效率层面的直接体现。赞分享后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载相关推荐Yii 2 使用 Gii 自动生成代码从模块启用、Active Record 生成到 CRUD 完整实战Yii 2 使用 Gii 自动生成代码从模块启用、Active Record 生成到 CRUD 完整实战 本指南基于仓库内的官方入门文档 docs/guide后端Web框架Yii 2 使用 Gii 自动生成代码从启用模块到生成 Active Record 与完整 CRUDYii 2 使用 Gii 自动生成代码从启用模块到生成 Active Record 与完整 CRUD 本篇指南聚焦 Yii 2 框架内建的代码生成器 Gii后端Web框架Yii 2 实战使用 Gii 代码生成器自动生成模型与 CRUD 代码Yii 2 实战使用 Gii 代码生成器自动生成模型与 CRUD 代码 Gii 是 Yii 2 官方提供的可视化代码生成工具它以模块形式随应用运行只需在网后端Web框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Harness 可靠性文档(RELIABILITY.md)编写指南:如何用仓库本地证据证明系统可重启、可诊断、可回归

Harness 可靠性文档(RELIABILITY.md)编写指南:如何用仓库本地证据证明系统可重启、可诊断、可回归

【免费下载链接】learn-harness-engineering Harness engineering beginner tutorial, from 0 to 1 项目地址: https://gitcode.com/gh_mirrors/le/learn-harness-engineering 点击查看 免费下载 本文以 docs/ja/resources/openai-advanced/repo-template/docs/REL…

2026/9/23 20:49:08 阅读更多 →
男女性别检测数据集:VOC+YOLO双格式9769张图开箱即训

男女性别检测数据集:VOC+YOLO双格式9769张图开箱即训

简介:这份数据集面向计算机视觉与目标检测方向的开发者与学生,提供男女性别检测所需的图像与标注文件,可直接用于训练YOLO、Faster R-CNN等模型。数据集合计9769张jpg图片,并配套Pascal VOC格式xml与YOLO格式txt标注,共…

2026/9/23 20:49:07 阅读更多 →
裂缝检测数据集实战:从VOC/YOLO格式转换到Ultralytics训练全流程

裂缝检测数据集实战:从VOC/YOLO格式转换到Ultralytics训练全流程

简介:面向计算机视觉与工程检测方向的学习者,提供墙面、水泥路面裂缝检测的完整监督数据,可用于训练裂缝目标检测模型或进行标注格式转换实践。数据集包含8678张真实场景图片,均采用矩形框对“crack”单一类别进行标注&#xff0c…

2026/9/23 20:48:07 阅读更多 →

最新新闻

OBS Studio 32.1.0中文绿色版:专业直播录屏解决方案

OBS Studio 32.1.0中文绿色版:专业直播录屏解决方案

1. 项目概述:OBS Studio 32.1.0中文绿色版的核心价值作为一名从2016年就开始使用OBS的内容创作者,我见证了这款开源软件从简陋的直播工具成长为行业标杆的全过程。这次要介绍的32.1.0中文绿色版,可以说是目前最适合中文用户"开箱即用&qu…

2026/9/23 21:35:30 阅读更多 →
Convex Backend OCC 冲突调优指南:从检测症状到落地五种修复策略

Convex Backend OCC 冲突调优指南:从检测症状到落地五种修复策略

数据库后端 【免费下载链接】convex-backend The open-source reactive database for app developers 项目地址: https://gitcode.com/gh_mirrors/co/convex-backend 点击查看 免费下载 导读:本文基于 convex-backend 仓库中的性能审计技能文档&#xf…

2026/9/23 21:35:30 阅读更多 →
FerretDB v1.6.0 发布解读:SQLite 后端 ping/getParameter、killCursors 游标管理与关键修复

FerretDB v1.6.0 发布解读:SQLite 后端 ping/getParameter、killCursors 游标管理与关键修复

后端数据库文档数据库 【免费下载链接】FerretDB A truly Open Source MongoDB alternative 项目地址: https://gitcode.com/gh_mirrors/fe/FerretDB 点击查看 免费下载 FerretDB v1.6.0 是面向 MongoDB 兼容层的又一次功能性与健壮性升级:在已有 SQLit…

2026/9/23 21:35:30 阅读更多 →
Mineradio 播放器 SVG 玻璃质感系统:色散扭曲、搜索揭示时序与 Wallpaper Engine 单表面架构实战解析

Mineradio 播放器 SVG 玻璃质感系统:色散扭曲、搜索揭示时序与 Wallpaper Engine 单表面架构实战解析

桌面应用音视频 【免费下载链接】Mineradio-paused 一款以电影镜头、粒子视觉和歌词舞台为核心的沉浸式音乐播放器。 项目地址: https://gitcode.com/gh_mirrors/mi/Mineradio-paused 点击查看 免费下载 导读 本文以 Mineradio 仓库中的 docs/GLASS_SVG_TEXTURE.m…

2026/9/23 21:35:30 阅读更多 →
nuqs 错误 NUQS-303 排查指南:Multiple adapter contexts detected(检测到多个适配器上下文)

nuqs 错误 NUQS-303 排查指南:Multiple adapter contexts detected(检测到多个适配器上下文)

前端状态管理 【免费下载链接】next-usequerystate Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string. 项目地址: https://gitcode.com/gh_mirrors/ne/next-usequerystate 点击查看 免费下载 导读…

2026/9/23 21:35:30 阅读更多 →
K8s 生产排障实战:10 个高频故障与排查命令(建议收藏)

K8s 生产排障实战:10 个高频故障与排查命令(建议收藏)

摘要整理 K8s 生产环境十类高频故障:Pending、CrashLoopBackOff、ImagePullBackOff、OOMKilled、Service 不通、Ingress 报错、节点 NotReady、磁盘压力驱逐、滚动发布抖动、DNS 解析失败。每类给出排查命令、常见根因与处理方式,附 kubectl 速查表。排查前的三个基本功 kubect…

2026/9/23 21:34:29 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →