在 CakePHP 4 配置中读取为字符串的布尔值

Boolean value read as string in CakePHP 4 config

我目前正在将我的项目从 CakePHP 3 更新到 CakePHP 4。 我遇到的一个非常烦人的问题是存储在配置中的 'debug' 值被读取为字符串,而不是布尔值。 这直接导致 CakePHP 内部出错 类.

这是config/app.php的相关部分:

<?php
return [
    /**
     * Debug Level:
     *
     * Production Mode:
     * false: No error messages, errors, or warnings shown.
     *
     * Development Mode:
     * true: Errors and warnings shown.
     */
    'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),

...

在我的 .env 文件中我有这个:

DEBUG=true

当与 filter_var 一起使用时,计算结果为布尔值 true,因此应将其保存在我的配置数组中。

这是我遇到的错误:

Argument 2 passed to Cake\Error\ErrorHandler::_displayError() must be of the type boolean, string given, called in /www-data/rebe001/hcms-sme-apps-com-cake4-cake/public/vendor/cakephp/cakephp/src/Error/BaseErrorHandler.php on line 188

我查看了 BaseErrorHandler::handleError 方法,它读取配置以查找 'debug' 键的值。 该值是一个字符串,值为 '1'.

我还在我的 AppController::initialize 方法中放置了一个 dd() 的值,并且那里的值是 '1'.

我也试过编辑 app.php 配置文件,硬编码 true 值:

<?php
return [
    /**
     * Debug Level:
     *
     * Production Mode:
     * false: No error messages, errors, or warnings shown.
     *
     * Development Mode:
     * true: Errors and warnings shown.
     */
    //'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),
    'debug' => true,

...

但结果没有改变。我仍然得到错误。所以问题不在于我的 .env 文件或值的读取方式。 我认为问题在于值是如何存储在 CakePHP 的内部配置数组中的,或者可能是它被检索的方式。

我发现解决问题的唯一方法是在 AppController::initialize 中将值强制为布尔值 true,但我当然想避免这种情况。添加此行解决了问题,以便我可以进一步进行调试,但我显然不想将其用作永久解决方案。

Configure::write('debug', true);

有没有其他人遇到(并希望解决)这个问题?

如评论中所述,配置确实在最初从 config/app.php 读取后被重写,并且为 'debug' 设置了一个非布尔值]键。