版本历史
Introduction
插件最好维护一个更改日志,记录代码中的任何更改或改进。除了编写有关更改的注释外,此过程还具有执行的有用能力迁移和种子文件 以正确的顺序。
更改日志存储在名为version.yaml
在 - 的里面/updates 插件目录,与迁移文件和种子文件共存。此示例显示典型的插件更新目录结构:
📂 plugins
┗ 📂 myauthor <-- Author name
┗ 📂 myplugin <-- Plugin name
┗ 📂 updates <-- Database migrations
┣ 📂 v1.0.0 <-- Migrations for a specific version of the plugin
┃ ┣ 📜 seed_the_database.php <-- Database seed file, referenced in version.yaml
┃ ┗ 📜 create_records_table.php <-- Database migration file, referenced in version.yaml
┗ 📜 version.yaml <-- Changelog
更新过程
在更新过程中,系统会通知用户最近对插件的更改,它也可以提示他们重要的或破坏性的变化.任何给定的迁移或种子文件只会在成功更新后执行一次。当发生以下任一情况时,Winter 会自动执行更新过程:
- 当管理员登录到后端时。
- 当使用后端区域中的更新功能更新系统时。
- 当。。。的时候控制台命令
php artisan winter:up
在命令行中从应用程序目录中调用。
NOTE: 插件初始化过程 在更新过程中被禁用,这应该是迁移和播种脚本的考虑因素。
插件依赖
更新以特定顺序应用,基于在插件注册文件中定义的依赖项.在首先更新所有依赖项之前,依赖的插件不会更新。
<?php namespace Acme\Blog;
class Plugin extends \System\Classes\PluginBase
{
public $require = ['Acme.User'];
}
在上面的例子中Acme.Blog 插件将不会更新,直到Acme.User 插件已完全更新。
插件版本文件
这version.yaml 文件,称为插件版本文件, 包含版本注释并以正确的顺序引用数据库脚本。请阅读数据库结构 有关迁移文件的信息的文章。如果您要将插件提交给Marketplace.以下是插件版本文件的示例:
"v1.0.1": "First version"
"v1.0.2": "Second version"
"v1.0.3":
- "Third version"
- "which has a lot of changes"
- "including this one"
"v1.1.0": "!!! Important update"
"v1.1.1":
- "Update with a migration and seed"
- "and here's the migration"
- "v1.1.1/create_tables.php"
- "and here's the seed"
- "v1.1.1/seed_the_database.php"
NOTE:
version.yaml
文件支持每个版本有多个文本条目作为更改日志描述。您可以根据需要拥有任意数量的更新消息,迁移文件也可以在任何位置列出。
正如您在上面看到的,应该有一个代表版本号的键,后面是更新消息,它可以是一个字符串或一个包含更新消息的数组。对于引用迁移或种子文件的更新,作为脚本文件名的行可以放在任何位置。没有关联更新文件的评论示例:
"v1.0.1": "A single comment that uses no update scripts."
重要更新
有时,插件需要引入一些功能,这些功能会破坏已经在使用该插件的网站。如果更新评论在version.yaml 文件以三个感叹号 (!!!
) 那么它会被考虑Important 并且在更新前会要求用户确认。重要更新评论的示例:
"v1.1.0": "!!! This is an important update that contains breaking changes."
当系统检测到重要更新时,它将提供三个选项来继续:
- 确认更新
- 跳过此插件(仅一次)
- 跳过这个插件(总是)
确认评论将照常更新插件,或者如果评论被跳过,则不会更新。
迁移和种子文件
如前所述,更新还定义了何时迁移和种子文件 应该应用。带有评论和更新的更新行:
"v1.1.1":
- "This update will execute the two scripts below."
- "v1.1.1/some_upgrade_file.php"
- "v1.1.1/some_seeding_file.php"
更新文件名应该使用snake_case 而包含的 PHP 类应该使用CamelCase.对于一个名为some_upgrade_file.php 相应的类是SomeUpgradeFile
.
<?php namespace Acme\Blog\Updates;
use Schema;
use Winter\Storm\Database\Updates\Migration;
/**
* some_upgrade_file.php
*/
class SomeUpgradeFile extends Migration
{
///
}