版本历史

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 会自动执行更新过程:

  1. 当管理员登录到后端时。
  2. 当使用后端区域中的更新功能更新系统时。
  3. 当。。。的时候控制台命令 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."

当系统检测到重要更新时,它将提供三个选项来继续:

  1. 确认更新
  2. 跳过此插件(仅一次)
  3. 跳过这个插件(总是)

确认评论将照常更新插件,或者如果评论被跳过,则不会更新。

迁移和种子文件

如前所述,更新还定义了何时迁移和种子文件 应该应用。带有评论和更新的更新行:

"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
{
    ///
}
豫ICP备18041297号-2