itmundi / schematic
Requires
- php: ^7.0
- craftcms/cms: ~3.0.0
- symfony/yaml: ^3.0 || ^4.0
Requires (Dev)
- codeception/codeception: ^2.4
- craftcms/cms: 3.0.12
- phpmd/phpmd: ^2.6
- squizlabs/php_codesniffer: ^3.2
- dev-master
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.18
- 4.0.17
- 4.0.16
- 4.0.15
- 4.0.14
- 4.0.13
- 4.0.12
- 4.0.11
- 4.0.10
- 4.0.9
- 4.0.8
- 4.0.7
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.8.12
- 3.8.11
- 3.8.10
- 3.8.9
- 3.8.8
- 3.8.7
- 3.8.6
- 3.8.5
- 3.8.4
- 3.8.3
- 3.8.2
- 3.8.1
- 3.8.0
- 3.7.2
- 3.7.1
- 3.7.0
- 3.6.1
- 3.6.0
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.3
- 3.4.2
- 3.4.1
- 3.4.0
- 3.3.2
- 3.3.1
- 3.3.0
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- 2.0.1
- 2.0.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.4
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.1
- 1.0.0
- dev-craft2
This package is not auto-updated.
Last update: 2022-02-01 12:52:10 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
使用方法
基本使用
此工具最常见的使用模式是从开发环境同步到生产环境,操作如下:
- 在本地创建一个 Craft 项目
- 设置所有需要的插件、部分、模板等。
- 在本地运行 Schematic 导出
- 如果使用版本控制系统,可选地将模式文件提交到本地仓库
- 将 Craft 应用程序部署到生产环境
- 远程运行 Schematic 导入
或者,要从生产环境同步到开发环境
- 远程运行 Schematic 导出
- 在本地拉取模式文件
- 如果使用版本控制系统,可选地将模式文件提交到本地仓库
- 在本地运行 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)许可。请参阅许可证文件获取更多信息。
变更日志
鸣谢
灵感来源于强大的ArtVandelay 插件,并由这些出色的个人构建