ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Yii 2 Gii 代码生成器实战指南:从启用模块到自动生成完整 CRUD 应用

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),仅供参考
返回列表