在 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' 设置了一个非布尔值]键。
我目前正在将我的项目从 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' 设置了一个非布尔值]键。