lingaro/config

安装次数: 8,312

依赖者: 0

建议者: 0

安全性: 0

星标: 5

关注者: 2

分支: 2

公开问题: 0

类型:magento2-module

1.0.5 2023-05-22 11:15 UTC

This package is auto-updated.

Last update: 2024-09-07 12:20:12 UTC


README

此模块允许通过csv文件管理Magento配置(core_config_data)。它旨在替换包括config.php、环境变量和命令app:config:dumpapp:config:import在内的原生magento系统,因为这些工具存在局限性。

基本用法

  1. 创建配置csv文件

  2. 将其保存在任何您希望的位置,最好是在您的Magento项目的git存储库中。

  3. 在您的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"。

不同的环境

如果您需要为生产、测试和开发环境设置不同的配置,请使用以下机制之一或多个

  1. CLI参数--env + common.csv文件中的多个环境特定值(在另一部分中描述)。在CI/CD过程中,请确保根据环境使用不同的--env参数运行命令。

  2. 多个文件,例如

    /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
  3. 您也可以在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