提问人:Diego Alonso 提问时间:10/31/2023 更新时间:11/8/2023 访问量:99
适用于不同环境的 CodeIgniter 4 配置文件
CodeIgniter 4 config files for different environments
问:
我正在 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
│ └── ...
答:
供您参考,您通常不需要手动 修改/编辑框架的核心配置属性。全缩放器 数组结构化配置属性是 可使用
.env
文件中的环境变量进行更改/修改。此特殊的.env
文件比 相应配置类中的硬编码值。这 消除了您对由于框架而丢失设置的担忧 更新。
此外,您可以为您的 核心框架设置范围之外的其他设置。 这些自定义配置类的公共属性也是 可更改/可覆盖使用相应
环境。
总结:
具有交替文件,其设置将覆盖新的自定义和现有核心配置类的公共标量和数组结构化属性。😀.env
参考
如果命名空间变量的前缀与配置类的命名空间完全匹配,则设置的尾随部分(点之后)将被视为配置属性。如果它与现有配置属性匹配,则环境变量的值将替换配置文件中的相应值。如果没有匹配项,则配置类属性保持不变。在此用法中,前缀必须是类的完整(区分大小写)命名空间。
Config\App.forceGlobalSecureRequests = true Config\App.CSPEnabled = true
评论
我在过滤器方面陷入了死胡同,我发现如果不编辑框架文件 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 文件,我找不到解决方法,这是否可行?
提前致谢。
评论
CI_ENVIRONMENT
.env
文件中的简单环境变量来实现?env
env
.env