ARTICLE DETAIL

资讯详情

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

使用 Gii 在 Yii 2 中自动生成代码:从 Active Record 到完整 CRUD 的实战指南

使用 Gii 在 Yii 2 中自动生成代码:从 Active Record 到完整 CRUD 的实战指南 后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载Gii 是 Yii 2 内置的代码生成工具它以 Web 模块的形式提供允许开发者通过表单交互自动生成实现常见网站功能的代码例如 Active Record 模型类、查询Search模型以及完整的 CRUD增删改查操作。本指南基于 docs/guide-fr/start-gii.md与英文原版 docs/guide/start-gii.md 对应展开带领你完成在应用内启用 Gii、生成country数据表的模型与 CRUD 代码、并在浏览器中验证功能的完整流程同时结合仓库源码揭示 Gii 作为模块被加载与执行的底层机制。读完本文你将掌握用 Gii 快速搭建数据驱动页面的标准工作流并了解如何基于生成代码进行二次定制。Gii 是什么一个以模块形态存在的代码生成器Gii 在 Yii 2 中不是一个独立的命令行程序而是作为框架的**模块Module**提供。在 Yii 中模块是自包含的子应用拥有自己的 MVC 元素模型、视图、控制器并且可以继续包含子模块。这一机制在框架源码中有明确对应模块的基类yii\base\Module继承自ServiceLocator维护$id、$module父模块、$modules子模块映射等核心属性并定义了EVENT_BEFORE_ACTION与EVENT_AFTER_ACTION两个生命周期事件framework/base/Module.php。因此启用 Gii 的本质就是在应用的modules配置属性中注册一个名为gii、类为yii\gii\Module的模块。从Module::setModule()的实现可以看到模块配置会被登记到模块容器中并在首次访问时被实例化。说明本指南面向基本应用模板Basic的使用方式高级模板Advanced中的backend与frontend应用启用方式相同只是配置文件路径不同如backend/config/main.php。启用 Gii配置、入口脚本与环境常量在 config/web.php 中注册模块无论应用是通过何种方式创建的启用 Gii 的配置代码通常已经存在于config/web.php中标准写法如下$config [ ... ]; if (YII_ENV_DEV) { $config[bootstrap][] gii; $config[modules][gii] [ class yii\gii\Module, ]; }这段配置的含义是当应用处于开发环境时$config[modules][gii]声明应用包含一个名为gii的模块其类为yii\gii\Module$config[bootstrap][] gii将gii加入引导bootstrap列表使模块在应用启动阶段就被加载。bootstrap机制的具体执行可以在框架源码中找到。在yii\base\Application::bootstrap()中框架遍历$this-bootstrap数组中的每一项如果该项是字符串则先判断它是已注册的组件$this-has($mixed)还是模块$this-hasModule($mixed)若是模块则通过$this-getModule($mixed)实例化并加载它。这正是 Gii 的控制器路由能够在应用启动后立即可用的原因——模块在引导阶段就被提前实例化其路由规则随之注册进应用。入口脚本决定开发环境YII_ENV_DEV之所以为真取决于入口脚本web/index.php中定义的环境常量。检查你的web/index.php通常会看到如下代码defined(YII_ENV) or define(YII_ENV, dev);根据 docs/guide/concept-configurations.md#environment-constants 的说明YII_ENV可取三个值取值生效常量说明prodYII_ENV_PROD生产环境也是未定义YII_ENV时的默认值devYII_ENV_DEV开发环境testYII_ENV_TEST测试环境入口脚本将YII_ENV定义为dev应用即处于开发模式YII_ENV_DEV求值为true上面的条件配置随之生效Gii 被自动启用。反过来如果入口脚本未定义YII_ENV或定义为prodGii 模块将不会被注册——这本身就是一种基于环境常量的安全开关避免生成器在生产环境暴露。访问 Gii配置就绪后通过浏览器访问下面的 URL 即可打开 Gii 首页https://hostname/index.php?rgiiURL 中的r参数即路由routegii是模块的唯一 IDuniqueId。从Module::getUniqueId()的实现可以看到位于应用根部的模块其唯一 ID 就是自身的$idgii而嵌套子模块则会被拼接为父ID/子ID形式。安全限制allowedIPs 白名单出于安全考虑当你从 localhost 之外的机器访问 Gii 时默认会被拒绝。此时需要为 Gii 配置允许访问的 IP 白名单gii [ class yii\gii\Module, allowedIPs [127.0.0.1, ::1, 192.168.0.*, 192.168.178.20] // 按需调整 ],其中127.0.0.1与::1分别代表 IPv4/IPv6 的本机回环地址192.168.0.*使用通配符匹配整个子网也可以像192.168.178.20一样精确到单个 IP。该配置应视为生产环境的安全红线请勿在生产环境中启用 Gii即便启用也务必收紧白名单。用 Model Generator 生成 Active Record 类填写生成表单在 Gii 首页点击Model Generator模型生成器链接进入表单后按如下填写以指南示例中的country表为例Table NamecountryModel ClassCountryModel Generator 的作用是为指定的数据库表生成对应的模型类。生成出的类继承自框架的yii\db\ActiveRecord基类从而获得按主键查询、关联查询、插入、更新、删除等 Active Record 的全部能力同时根据表结构自动推导属性标签labels与验证规则rules。预览、diff 与覆盖生成填写完毕后点击Preview预览按钮Gii 会列出将要生成的文件此时应能看到models/Country.php出现在待创建文件列表中。可以点击该文件名直接预览将要生成的代码内容。Gii 的预览环节提供了两个关键能力diff 对比如果你此前已经创建过同名文件点击文件名旁的diff按钮Gii 会显示将要生成的代码与现有文件之间的差异帮助你判断是否值得覆盖overwrite 覆盖需要覆盖已有文件时勾选文件旁的overwrite复选框再点击Generate生成按钮若是全新文件直接点击Generate即可。生成结束后Gii 会显示确认页面提示代码已成功生成如果覆盖了已有文件还会同时显示该文件已被新代码覆盖的提示。用 CRUD Generator 生成完整增删改查CRUD 是 Create创建、Read读取、Update更新、Delete删除四个单词的缩写对应绝大多数网站对数据执行的四类常规操作。Gii 的CRUD GeneratorCRUD 生成器能够一次性生成控制器、模型、搜索模型与视图完整实现这四类功能。在 Gii 首页点击CRUD Generator以country为例填写如下字段Model Classapp\models\CountrySearch Model Classapp\models\CountrySearchController Classapp\controllers\CountryController其中CountrySearch是 Gii 同步生成的搜索模型它基于yii\data\ActiveDataProvider实现数据网格的过滤、排序与分页查询逻辑供列表页使用若希望深入研究其原理可参见 docs/guide/output-data-providers.md 对数据提供者的讲解。点击Preview后Gii 会列出将要生成的完整文件清单如果你在指南的数据库章节中已经手工创建过controllers/CountryController.php与views/country/index.php这两个文件此前版本未完整支持 CRUD 功能请勾选overwrite复选框让 Gii 用完整支持 CRUD 的新版本覆盖它们。试运行验证生成的 CRUD 页面生成完成后在浏览器中访问以下 URL 查看效果https://hostname/index.php?rcountry/index页面会展示一个数据网格列出数据库表中所有国家记录。你可以排序点击网格列头对数据进行排序过滤在列头的输入框中输入过滤条件并提交网格会按条件筛选数据。对网格中的每一行你都可以执行三类操作查看详情View、更新Update、删除Delete。此外网格顶部的Create Country按钮会引导你进入一个创建新国家的表单页面。至此一条完整的数据操作链路——创建、列表展示含搜索过滤、详情、更新、删除——已经全部由 Gii 自动生成并可直接运行。生成的文件清单以下是 Gii 为country示例生成的全部文件也是后续排查与定制的落脚点控制器controllers/CountryController.php模型models/Country.php与models/CountrySearch.php视图views/country/*.phpindex、view、create、update、_form 等视图文件以仓库中的真实应用模板结构为参照这些文件分别落在应用根目录的controllers/、models/、views/三个目录下遵循 Yii 2 标准的 MVC 目录约定参见 docs/guide/structure-overview.md 对整体目录结构的说明。定制与扩展生成代码Gii 被设计为一个高度可定制、可扩展的代码生成工具yii\gii\Module本身即支持通过模块配置注入自定义生成器。合理的定制策略包括直接修改生成后的文件Gii 生成的代码是普通 PHP 文件与手写代码无任何区别你可以自由调整控制器动作、验证规则、视图布局与样式重复生成并谨慎覆盖数据表结构变化后可再次进入 Gii 重新生成利用Preview diff功能先对比差异再决定是否覆盖避免误伤手写改动扩展生成器从源码结构看Gii 以生成器Generator为核心抽象每个生成器对应一个表单与一组模板文件开发者可以基于此添加自定义生成器将其注册到 Gii 模块中供团队复用。需要提醒的是覆盖生成会用新代码整体替换旧文件因此对生成文件做过的手工修改在覆盖后会丢失。建议将固定不变的定制逻辑抽离到 trait、行为behavior或独立基类中再让生成类继承从而兼顾重复生成与保留定制。总结通过本指南你完成了从启用 Gii 到生成完整 CRUD 功能的全部闭环在config/web.php中通过modules配置注册yii\gii\Module并由入口脚本的环境常量驱动其按环境启停使用Model Generator为country表生成基于yii\db\ActiveRecord的模型类掌握 Preview、diff、overwrite 的生成流程使用CRUD Generator一键生成控制器、搜索模型与全部视图实现创建、读取、更新、删除的完整数据操作在浏览器中验证数据网格的排序、过滤、增删改能力并基于生成文件清单进行后续定制。在此基础上Gii 所代表的以表单驱动、以模板生成、以差异预览保护手写代码的工作方式可以显著加速数据库驱动功能的开发节奏——它生成的是可运行的起点而非不可修改的终点。赞分享后端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),仅供参考
返回列表