itmundi/schematic

此包已被弃用且不再维护。作者建议使用nerds-and-company/schematic包。

构建设置和同步工具

安装次数: 23,794

依赖者: 0

推荐者: 0

安全性: 0

星标: 140

关注者: 22

分支: 16

公开问题: 5

类型:craft-plugin

4.1.2 2019-02-10 12:32 UTC

README

Schematic 允许您在多个环境中同步您的 Craft 设置。它通过将有关资产、数据库(字段、部分、用户)、区域和插件的信息导出到 YAML 文件来实现,该文件可以导入到其他环境中。

❗ Craft 3.1 注意事项

Craft 3.1 引入了项目配置,这将提供大部分甚至所有 Schematic 功能的原生支持。我们将继续支持 Schematic,但它可能变得过时。

目前 Schematic 无法在 Craft 3.1 或更高版本上运行!

安装

您可以使用 Composer 安装此工具。从项目的根目录运行以下命令

composer require nerds-and-company/schematic

这将把 nerds-and-company/schematic 添加到项目的 composer.json 文件中,并将源代码安装到 vendor/nerds-and-company/schematic 目录。

Schematic 现在作为可安装的插件在 Craft 中可用。您可以在 cp 中安装它或使用 ./craft install/plugin schematic

使用方法

基本使用

此工具最常见的使用模式是从开发环境同步到生产环境,操作如下:

  1. 在本地创建一个 Craft 项目
  2. 设置所有需要的插件、部分、模板等。
  3. 在本地运行 Schematic 导出
  4. 如果使用版本控制系统,可选地将模式文件提交到本地仓库
  5. 将 Craft 应用程序部署到生产环境
  6. 远程运行 Schematic 导入

或者,要从生产环境同步到开发环境

  1. 远程运行 Schematic 导出
  2. 在本地拉取模式文件
  3. 如果使用版本控制系统,可选地将模式文件提交到本地仓库
  4. 在本地运行 Schematic 导入

导出

可以通过运行以下命令创建导出:

./craft schematic/export

要跳过导出特定数据类型,可以指定以下形式的排除项

./craft schematic/export --exclude=volumes

也可以指定多个排除项

./craft schematic/export --exclude=volumes,categoryGroups

同样,也可以只导出数据类型的一个子集

./craft schematic/export --include=volumes,categoryGroups

参见[支持的数据类型](#支持的数据类型)

导出将在 config/schema.yml 生成一个模式文件。文件路径可以通过 --file 标志更改,例如 craft schematic/export --file=/path/to/my-schema.yml

导入

要使用 Schematic 运行导入,需要一个模式文件。可以通过运行以下命令创建导入:

./craft schematic/import

默认情况下,schematic 会查看 config/schema.yml。要更改 schematic 查找模式文件的路径,请使用 --file 标志。

可选地,可以使用--force标志来使导入删除导入文件中未提到的任何项目。

警告!! 这也将删除任何相关内容。

要跳过导入特定数据类型,可以在以下形式中指定排除项

./craft schematic/import --exclude=volumes

也可以指定多个排除项

./craft schematic/import --exclude=volumes,categoryGroups

参见[支持的数据类型](#支持的数据类型)

支持的数据类型

以下是所有数据类型及其对应的排除参数值列表

数据类型 排除/包含参数
插件 插件
站点 站点
资产转换 assetTransforms
分类组 categoryGroups
元素索引 elementIndexSettings
电子邮件设置 emailSettings
字段 fields
常规设置 generalSettings
全局集 globalSets
插件 插件
部分 sections
标签组 tagGroups
用户设置 userSettings
用户组 userGroups
volumes

覆盖和环境变量

可以通过在config/override.yml中添加键并设置相应的环境变量来覆盖特定的键。在override.yml中的键名需要与您想要覆盖的schema.yml中的键相同,包括任何父键名。

覆盖文件在导出时也会被应用,因此您的变量不会被实际值覆盖。Schematic还支持使用--override-file标志传递覆盖文件,例如:./craft schematic/import --override-file=your/config/override.yml

示例

如果以下override.yml被定义

parent:
    key_name: %KEY_VALUE%

则需要设置环境变量KEY_VALUE。此环境变量的值将覆盖键key_name。如果没有设置此环境变量,Schematic将引发错误。

环境变量也可以直接在schema.yml文件中使用。请注意,如果这样做,它们将根据环境变量的值被覆盖。

事件

可以使用EVENT_RESOLVE_CONVERTER事件注入自定义转换器。这对于导入和导出自定义字段类型特别有用。转换器需要实现NerdsAndCompany\Schematic\Interfaces\ConverterInterface

Event::on(Schematic::class, Schematic::EVENT_RESOLVE_CONVERTER, function (ConverterEvent $event) {
    if ($event->modelClass = "My\Custom\Field") {
      $event->converterClass = "My\Custom\FieldConverter";
    }
});

可以使用EVENT_MAP_SOURCE事件注入自定义源映射。这对于导入和导出自定义源特别有用。

Event::on(Schematic::class, Schematic::EVENT_MAP_SOURCE, function (SourceMappingEvent $event) {
    list($sourceType, $sourceFrom) = explode(':', $event->source);

    switch ($sourceType) {
        case 'plugin-source':
            $event->service = Craft::$app->customService;
            $event->method = 'getCustomModelBy';
            break;
    }
});

注意事项

Schematic使用句柄来识别内容。当在架构文件中更改句柄并使用force运行导入时,将使用该句柄创建一个新的内容类型,并删除旧的内容类型!

建议使用Craft内容迁移更改内容类型句柄,并在运行schematic导入之前运行这些迁移。

许可证

本项目已根据MIT许可证(MIT)许可。请参阅许可证文件获取更多信息。

变更日志

CHANGELOG.md

鸣谢

灵感来源于强大的ArtVandelay 插件,并由这些出色的个人构建