lingaro / config
This package is auto-updated.
Last update: 2024-09-07 12:20:12 UTC
README
此模块允许通过csv文件管理Magento配置(core_config_data)。它旨在替换包括config.php、环境变量和命令app:config:dump
和app:config:import
在内的原生magento系统,因为这些工具存在局限性。
基本用法
-
创建配置csv文件
-
将其保存在任何您希望的位置,最好是在您的Magento项目的git存储库中。
-
在您的CI/CD流程中,使用此命令自动导入文件
bin/magento lingaro:config --files myConfiguration.csv
该命令会自动清除所有缓存,因此更改应立即可见。
Csv格式
Csv要求
- 值分隔符:逗号
- 编码:UTF-8,无BOM
- 需要包含列名的标题行
- 需要以下列:路径、作用域、代码、值(或
value:<env>
,见下文)、状态
注意:在Windows中保存文件时,由于用户偏好,文件可能使用分号作为值分隔符,并使用Windows编码。
作用域和代码
可能的作用域包括:默认、网站和商店。如果您留空作用域字段,则默认使用默认作用域。
作用域代码需要为
- 网站代码 - 对于作用域网站
- 商店代码 - 对于作用域商店
- <空字符串> - 对于默认作用域
状态
状态决定了导入行为。可能的状态
- 总是
- 不存在
- 忽略
- 初始化
- 一次
可能通过di.xml添加对其他状态的支持。
总是
从csv导入配置到数据库(如果存在于数据库中则更新,如果不存在则插入)。
不存在
从数据库中删除配置。
忽略
忽略配置(就像它没有被列入csv文件一样)。
初始化
仅在配置不在数据库中时才导入配置。这意味着csv值比在管理面板中指定的配置具有较低优先级,并且永远不会覆盖由管理员用户手动设置的值。
注意:当您在magento管理面板中更改一个配置时,整个部分都会被保存(数据库将填充默认值)。因此,配置很可能已经在数据库中存在,即使您从未更改过它。
一次
仅在配置和值组合尚未从csv导入到数据库时才导入配置。
示例
- 管理员用户将配置ABC设置为1。数据库中的值是1
- 您导入包含值为2的csv,状态为一次。该命令发现此配置尚未从csv导入(基于新的数据库列:imported_value_hash),因此csv配置被导入。数据库中的值是2
- 管理员用户将配置更改为1。数据库中的值是1
- 您再次导入csv,但这次包含值为2和状态一次 - 命令发现该配置已使用值2导入到数据库中,因此跳过导入。数据库中的值是1
- 您再次导入csv,但这次包含值为3 - 命令发现该配置已导入到数据库中,但之前的导入使用了不同的值,因此csv配置被导入。数据库中的值是3。
值
在大多数情况下,值应该是包含原始值的字符串。然而,也有一些特殊情况
- 除了原始值外,您还可以使用表达式,例如:{{env MY_ENV_VAR}}
- 对于后端类型为Encrypted的配置,您应指定明文值(因此,出于安全原因,您应使用“env”表达式)
- 对于后端类型为ArraySerialized的配置,您应使用JSON字符串,例如:{"name": "abc","code":"xyz"}
表达式
以下表达式可以作为值使用
- env
- file
- null
可以通过di.xml添加对其他表达式的支持。
ENV
ENV表达式允许您使用环境变量设置秘密或环境特定的配置。
RECAPTCHA_KEY=passAbc123 bin/magento lingaro:config --files myConfiguration.csv
注意,这可以任何环境变量。它不需要(也不应该)是Magento格式的环境变量,例如CONFIG__DEFAULT__CONTACT__EMAIL__RECIPIENT_EMAIL。
注意,默认情况下,Magento允许您使用环境变量设置配置,例如CONFIG__DEFAULT__CONTACT__EMAIL__RECIPIENT_EMAIL="contact@example.com"。然而,本地系统使得无法在管理面板中覆盖环境中的值,而此工具允许这样做。
FILE
FILE表达式允许您使用外部文件设置秘密或环境特定的配置。
touch .recaptcha_key
chmod 600 .recaptcha_key
echo "passAbc123" > .recaptcha_key
bin/magento lingaro:config --files myConfiguration.csv
NULL
NULL表达式允许您将配置设置为null(当需要区分null和空字符串时)。
环境特定值
您可以使用以下方式为不同环境定义不同的值
基于传递给lingaro:config命令的参数,数据库中保存的值如下
注意:如果您指定--env=dev,但value:dev为空,则安装程序将不会使用默认值。空值将被保存。
例如:
当您使用以下文件运行lingaro:config --env=dev configuration.csv
数据库中保存的值将是空字符串,而不是"1"。
不同的环境
如果您需要为生产、测试和开发环境设置不同的配置,请使用以下机制之一或多个
-
CLI参数--env + common.csv文件中的多个环境特定值(在另一部分中描述)。在CI/CD过程中,请确保根据环境使用不同的--env参数运行命令。
-
多个文件,例如
/common.csv /prod.csv /uat.csv /dev.csv
lingaro:config命令允许您指定多个文件 - 在这种情况下,它们将被合并。在CI/CD过程中,请确保根据环境使用不同的参数运行命令。
- prod: lingaro:config --files common.csv prod.csv
- uat: lingaro:config --files common.csv uat.csv
- dev: lingaro:config --files common.csv dev.csv
-
您也可以在common.csv中定义所有配置,但使用"ENV"表达式从环境加载值。
Csv - 数据库差异
如果您更改了您的configuration.csv文件,请确保您将配置标记为“absent”,而不是从csv文件中删除它。如果您只是从文件中删除配置,则下一次导入将保留数据库值不变,并在文件和数据库之间存在差异。
同样,出于同样的原因,如果您需要更改配置范围,请不要仅编辑现有配置条目中的范围。相反,为新的范围添加新条目,并将旧范围标记为“absent”。
示例:这是更改之前您的配置文件
这是更改后您的配置文件应看起来像什么
注意,此配置可能在数据库中有一个商店范围值,由管理员用户手动设置。此导入工具不会删除此值。因此,可能会出现导入新值失败的情况,因为商店值会掩盖来自csv文件的网站或默认值。
命令
bin/magento lingaro:config --files file1.csv file2.csv [--env=dev] [--dry-run] [-v]
如果您指定了多个文件,它们将被合并。最终值取自最后一个包含配置的文件,在本例中:来自file2.csv。
命令输出
在成功的情况下,命令退出代码为0,在错误的情况下,退出代码大于0。
在成功的情况下,命令打印更改摘要,例如。
Added: 1
Updated: 0
Updated Hash: 0
Removed: 0
Ignored: 0
Total: 1
增加详细程度(使用bin/magento lingaro:config -v
),命令将额外打印每个操作的配置列表,例如:
Added:
analytics/subscription/enabled stores italy
Updated:
sales/msrp/enabled default
Updated Hash:
sales/msrp/enabled websites b2c
更新哈希值表示CSV中的配置与数据库中的配置值相同,但数据库中缺少imported_value_hash,因此需要进行更新。
导入值哈希用于标记配置是使用Lingaro_Config导入的。
您可以使用--dry-run和增加详细程度来运行命令,以检查导入将如何影响数据库。
安装
composer require lingaro/config
bin/magento module:enable Lingaro_Config
bin/magento setup:upgrade