适用于不同环境的 CodeIgniter 4 配置文件

CodeIgniter 4 config files for different environments

提问人:Diego Alonso 提问时间:10/31/2023 更新时间:11/8/2023 访问量:99

问:

我正在 CodeIgniter 4 中设置一个原型应用程序,当涉及到为不同的环境使用不同的配置时,我感到非常困惑。我有一个概念,即为不同的环境使用不同的配置文件(或它们的版本),并保持框架的默认配置文件不变,但我不知道这是否是 CI4 的合适方法。我主要担心的是进一步的框架更新是否会结束更改默认配置文件。

我知道如何使用有关数据库和环境设置的 .env 文件,但我认为更进一步并设置不同的语言环境,使用不同的日志设置 Monolog,设置不同的过滤器等。但我不熟悉 CI4 的标准程序。

我真的很感激这方面的指导,提前致谢!

我尝试在 app/Config 中创建环境文件夹以适应命名空间,但 CI4 不会根据环境选择不同的文件。

    app/
    ├── Config/
    │   ├── development/
    │   │   ├── app.php
    │   │   ├── database.php
    │   │   ├── filters.php
    │   │   └── ...
    │   ├── production/
    │   │   ├── app.php
    │   │   ├── database.php
    │   │   ├── filters.php
    │   │   └── ...
    │   ├── testing/
    │   │   ├── app.php
    │   │   ├── database.php
    │   │   ├── filters.php
    │   │   └── ...
    │   ├── app.php
    │   ├── database.php
    │   ├── filters.php
    │   └── ...
codeigniter 框架 配置 环境 codeigniter-4

评论

1赞 Web Marketing Solution Network 11/2/2023
无需更改下载的默认配置目录。要更改环境,请找到 .env 文件,并在其中找到设置环境值,例如生产、开发。例如:CI_ENVIRONMENT = development,如果您在此代码之前看到 # 号,请将其删除。CI_ENVIRONMENT
1赞 steven7mwesigwa 11/3/2023
嗯,也许我没有早点说清楚。我的基本问题是:您目前正在实现哪些无法通过相应环境的 .env 文件中的简单环境变量来实现?
1赞 steven7mwesigwa 11/3/2023
供您参考,您通常不需要手动修改/编辑框架的核心配置属性。所有缩放器和数组结构化配置属性都可以使用文件中的环境变量进行更改/修改。此特殊文件比相应配置类中的硬编码值具有更高的优先级。这消除了您对由于框架更新而导致设置丢失的担忧。🙂envenv
1赞 steven7mwesigwa 11/3/2023
此外,还可以为核心框架设置范围之外的其他设置创建自定义配置类。这些自定义配置类的公共属性也可以使用相应环境的文件进行更改。.env
1赞 Diego Alonso 11/4/2023
非常感谢@steven7mwesigwa我相信这就是我要找的。我的目的是根据环境拥有不同的配置类集,但也许我的方法应该是使用不同的 .env 文件来覆盖这些类,然后在所述 .env 文件之间交替使用。

答:

0赞 steven7mwesigwa 11/4/2023 #1

供您参考,您通常不需要手动 修改/编辑框架的核心配置属性。全缩放器 数组结构化配置属性是 可使用 .env 文件中的环境变量进行更改/修改。此特殊的 .env 文件比 相应配置类中的硬编码值。这 消除了您对由于框架而丢失设置的担忧 更新。

此外,您可以为您的 核心框架设置范围之外的其他设置。 这些自定义配置类的公共属性也是 可更改/可覆盖使用相应 环境。

总结:

具有交替文件,其设置将覆盖新的自定义和现有核心配置类的公共标量和数组结构化属性。😀.env

参考

配置类和环境变量

如果命名空间变量的前缀与配置类的命名空间完全匹配,则设置的尾随部分(点之后)将被视为配置属性。如果它与现有配置属性匹配,则环境变量的值将替换配置文件中的相应值。如果没有匹配项,则配置类属性保持不变。在此用法中,前缀必须是类的完整(区分大小写)命名空间。

Config\App.forceGlobalSecureRequests = true
Config\App.CSPEnabled = true

评论

1赞 Diego Alonso 11/7/2023
它正在工作,我已经成功地从我的 .env.* 文件编辑了配置类。很棒的解决方案!
0赞 steven7mwesigwa 11/7/2023
@DiegoAlonso 非常感谢您的积极反馈。我很高兴我能帮上忙。😊
0赞 Diego Alonso 11/8/2023 #2

我在过滤器方面陷入了死胡同,我发现如果不编辑框架文件 app/Config/Filters,就无法使用过滤器.php

由于 .env 文件无法为配置类中的现有数组创建新的数组或键,但无法编辑它们的值,因此我仍然需要从过滤器中编辑$aliases、$globals 等数组.php

下面是我创建的别名为“log”的简单筛选器的示例:

public array $aliases = 
[
    'csrf'          => CSRF::class,
    'toolbar'       => DebugToolbar::class,
    'honeypot'      => Honeypot::class,
    'invalidchars'  => InvalidChars::class,
    'secureheaders' => SecureHeaders::class,
    'log' => LogFilter::class,
];

public array $globals = 
[
    'before' => [
        // 'honeypot',
        // 'csrf',
        // 'invalidchars',
        'log'
    ],
    'after' => [
        'toolbar',
        // 'honeypot',
        // 'secureheaders',
    ],
];

如果不编辑过滤器 .php 文件,我找不到解决方法,这是否可行?

提前致谢。