mouf / utils.patcher
为Mouf设计的补丁系统,使开发者能够了解已运行的补丁以及在其环境中需要运行的补丁。对于数据库补丁非常有用。
Requires
- php: >=7.0
- mouf/mouf-validators-interface: ~2.0
- mouf/utils.console: ~1.0
README
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
实例来编辑这些补丁类型或添加自己的补丁类型。
你是一个包开发者?你想让你的包创建/修改表?看看你可以如何使用补丁系统做到这一点。
想了解更多关于补丁系统的信息?想了解如何创建你自己的非数据库相关补丁?查看高级文档。