mouf/utils.patcher

为Mouf设计的补丁系统,使开发者能够了解已运行的补丁以及在其环境中需要运行的补丁。对于数据库补丁非常有用。

v2.2.0 2017-10-04 14:34 UTC

This package is auto-updated.

Last update: 2024-09-15 04:47:33 UTC


README

Latest Stable Version Latest Unstable Version License Scrutinizer Code Quality

Mouf的补丁系统

此包是为Mouf设计的补丁系统,使开发者能够了解已运行的补丁以及在其环境中需要运行的补丁。如果您是在团队中工作或与多个环境一起工作,了解某个环境中已应用或未应用的数据库补丁非常有用。

视频教程

<iframe width="640" height="480" src="//www.youtube.com/embed/1uxO1qDSuZw" frameborder="0" allowfullscreen></iframe>

安装补丁服务

通过 composer 安装。以下是一个典型的 composer.json 文件

{
	...
    "require": {
        "mouf/utils.patcher": "~2.0",
        "mouf/database.patcher": "~2.3"
    } 
}

如你所见,我们在这里安装了两个包。

  • mouf/utils.patcher 包含补丁服务。补丁服务可以用于安装任何类型的补丁,但不包含任何补丁实现。这就是为什么我们需要第二个包。
  • mouf/database.patcher 提供了一种创建数据库补丁的简单方法(补丁系统最常见的使用)。

使用补丁服务(图形用户界面)

一旦补丁服务安装完成,您将注意到在Mouf UI中有一个新的菜单。

使用 Utils > Patches management 菜单,您可以访问补丁列表或创建新的数据库补丁。

让我们快速查看一下补丁列表。

在这个列表中,您可以查看所有已定义的补丁。使用一个大的按钮,您可以轻松地应用需要应用的补丁。这是您在这个屏幕上应该唯一触摸的按钮,除非您正在玩一些高级功能,如数据库复制等...

如果您需要更细致的方法,您可以逐个 应用 每个补丁。您也可以选择 跳过 补丁,如果您希望自行运行它或知道它已经被应用。最后,您会注意到一些补丁可以进行 撤销

使用补丁服务(命令行界面)

您还可以使用Mouf控制台应用补丁。这在持续集成环境的部署或在生产服务器上特别有用。

$ # Apply all default patches
$ vendor/bin/mouf_console patches:apply-all
$
$ # Apply all patches from type default AND test_data
$ vendor/bin/mouf_console patches:apply-all --test-data
$
$ # View a list of all patches
$ vendor/bin/mouf_console patches:list
$
$ # Apply one specific patch by name
$ vendor/bin/mouf_console patches:apply [patch_name]
$
$ # Revert one specific patch by name
$ vendor/bin/mouf_console patches:revert [patch_name]

创建/编辑数据库补丁

您有两种方法来编辑您的数据库补丁。

  • 选项1:生成SQL补丁(您使用SQL来更改数据库)
  • 选项2:生成迁移PHP类(您使用PHP类来更改数据库)

使用SQL补丁

您可以使用 Utils > Patches management > Register a SQL patch 菜单创建新的SQL数据库补丁。

如你所见,您需要提供一个唯一的补丁名称。您可以(并且应该)添加一条注释,帮助您和他人记住这个补丁在做什么。最后,您将添加补丁的SQL。

当您保存补丁时,您可以选择要执行的操作。您有三个选项

  • 大多数情况下,当你保存补丁时,你很可能已经将其应用到了你的开发环境中。在这种情况下,你应该跳过该补丁(再次应用此补丁没有意义)。
  • 如果你尚未应用补丁,你可以选择保存并应用补丁。
  • 最后,你也可以选择保存,但暂时不应用补丁。在这种情况下,补丁将处于待处理状态。

高级选项

有许多高级选项。这些选项将允许你

  • 选择保存补丁的文件(补丁的SQL存储在其自己的文件中,通常在database/up目录下)。
  • 设置一个可用的反向补丁,用于取消/撤销你的补丁。

使用PHP迁移类

你可以通过Utils > 补丁管理 > 注册SQL补丁菜单创建一个新的PHP迁移类。

实际上有两种类型的迁移补丁

  • 修改数据库模型的补丁
  • 修改数据的补丁

你应该在UI中选择你正在创建哪种类型的补丁。

UI将为你生成一个包含你的类的PHP文件。

然后你可以使用Doctrine DBAL的强大功能来编写你的补丁。

用于更改数据库模型的生成的类

// The class will be generated by the patch system
class MyPatch extends AbstractSchemaMigrationPatch
{
    public function up(Schema $schema) : void
    {
        // Use the "up" function to alter the database model.
        // The $schema object documentation can be found in Doctrine DBAL documentation:
        //   http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/schema-representation.html
        
        // For instance:
        $table = $schema->createTable('posts');
        $table->addColumn('id', 'integer');
        $table->addColumn('description', 'string');
        $table->setPrimaryKey(['id']);
    }
    
    public function down(Schema $schema) : void
    {
        // Code your migration cancellation code here.
    }
    
    public function getDescription(): string
    {
        return 'The comment for your patch (displayed in the Mouf patch list or in the CLI command)';
    }
}

用于更改数据的生成的类

// The class will be generated by the patch system
class MyPatch extends AbstractDataMigrationPatch
{
    public function up(Connection $connection) : void
    {
        // Use the "up" function to alter the data.
        // The $connection object documentation can be found in Doctrine DBAL documentation:
        //   http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html
        
        // For instance:
        $connection->insert('posts', [
            'id' => 1,
            'description' => 'foobar'
        ]);
    }
    
    public function down(Connection $connection) : void
    {
        // Code your migration cancellation code here.
    }
    
    public function getDescription(): string
    {
        return 'The comment for your patch (displayed in the Mouf patch list or in the CLI command)';
    }
}

补丁类型

无论你创建SQL补丁还是PHP迁移类,你都可以选择补丁“类型”。

默认情况下,该软件包附带两种捆绑类型

  • 默认:对于应该始终应用的补丁(如修改数据库模型的补丁)
  • 测试数据:对于应根据环境条件应用的补丁(你可能想在开发环境中使用测试数据,但不希望在生产环境中使用)

你还可以通过编辑Mouf中的patchService实例来编辑这些补丁类型或添加自己的补丁类型。

你是一个包开发者?你想让你的包创建/修改表?看看你可以如何使用补丁系统做到这一点。
想了解更多关于补丁系统的信息?想了解如何创建你自己的非数据库相关补丁?查看高级文档。