你的扩展可能要存取数据库。不要假设使用你的扩展的应用总是用 Yii::$db 作为数据库连接。你应当在需要访问数据库的类中申明一个 db 属性。 这个属性允许你的扩展的用户可定制你的扩展使用哪个 DB 连接。例如, 你可以参考 yii\caching\DbCache 类看一下它是如何申明和使用 db 属性的。
如果你的扩展需要创建特定的数据库表,或者修改数据库结构,你应当
提供 数据迁移 来操作数据库的结构修改,而不是使用SQL文本文件;
尽量使迁移文件适用于不同的 DBMS;
在迁移文件中避免使用 Active Record。
使用 Assets
如果你的扩展是挂件或者模块类型,它有可能需要使用一些 assets 。 例如,一个模块可能要显示一些包含图片,JavaScript 和 CSS 的页面。因为扩展的文件 都是放在同一个目录之下,安装之后 Web 无法读取,你有两个选择使得这些 asset 文件目录 可以通过 Web 读取:
让扩展的用户手动将这些 asset 文件拷贝到特定的 Web 可以读取的文件夹;
申明一个 asset bundle 并依靠 asset 发布机制自动将这些文件(asset bundle 中列出的文件) 拷贝到 Web 可读的文件夹。
我们推荐你使用第二种方法,以便其他人能更容易使用你的扩展。
国际化和本地化
你的扩展可能会在支持不同语言的应用中使用!因此,如果你的扩展要显示内容给终端用户, 你应当试着实现 国际化和本地化,特别地,
如果扩展为终端用户显示信息,这些信息应该用 Yii::t() 包装起来,以便可以进行翻译。 只给开发者参考的信息(如内部异常信息)不需要做翻译。
如果扩展显示数字、日期等,你应该用 yii\i18n\Formatter 中适当的格式化规则做格式化处理。
测试
你一定想让你的扩展可以无暇地运行而不会给其他人带来问题和麻烦。为达到这个目的, 你应当在公开发布前做测试。
推荐你创建测试用例,做全面覆盖的测试你的扩展,而不只是依赖于手动测试。 每次发布新版本前,你只要简单地运行这些测试用例确保一切完好。 Yii 提供了测试支持,使你更容易写单元测试、验收测试和功能测试。
版本控制
你应该为每一个扩展定一个版本号(如 1.0.1)。我们推荐你命名版本号时参照 semantic versioning 决定用什么样的版本号。
发布
为使其他人知道你的扩展,你应该公开发布。
如果你首次发布一个扩展,你应该在 Composer 代码库中注册它,例如 Packagist。之后,你所需要做的仅仅是在 版本管理库中创建一个 tag (如v1.0.1),然后通知 Composer 代码库。 其他人就能查找到这个新的发布了,并可通过 Composer 代码库安装和更新该扩展。
在发布你的扩展时,除了代码文件,你还应该考虑包含如下内容 帮助其他人了解和使用你的扩展:
根目录下的 readme 文件:它描述你的扩展是干什么的以及如何安装和使用。 我们推荐你用 Markdown 的格式 来写并将文件命名为readme.md。
根目录下的修改日志文件:它列举每个版本的发布做了哪些更改。该文件可以用 Markdown 根式 编写并命名为 changelog.md。
根目录下的升级文件:它给出如何从其他就版本升级该扩展的指导。该文件可以用 Markdown 根式 编写并命名为 changelog.md。
入门指南、演示代码、截屏图示等:如果你的扩展提供了许多功能,在 readme 文件中不能完整 描述时,就要用到这些文件。
API 文档:你的代码应当做好文档,让其他人更容易阅读和理解。 你可以参照 Object class file 学习如何为你的代码做文档。
信息:你的代码注释可以写成 Markdown 格式。yiisoft/yii2-apidoc 扩展为你提供了一个从你的 代码注释生成漂亮的 API 文档。
信息:虽然不做要求,我们还是建议你的扩展遵循某个编码规范。 你可以参照 core framework code style。
核心扩展
Yii 提供了下列核心扩展,由 Yii 开发团队开发和维护。这些扩展全都在 Packagist 中注册:
yiisoft/yii2-apidoc: 提供了一个可扩展的、高效的 API 文档生成器。核心框架的 API 文档也是用它生成的。
yiisoft/yii2-authclient: 提供了一套常用的认证客户端,例如 Facebook OAuth2 客户端、GitHub OAuth2 客户端。
yiisoft/yii2-bootstrap: 提供了一套挂件,封装了 Bootstrap 的组件和插件。
yiisoft/yii2-codeception: 提供了基于 Codeception 的测试支持。