我目前正在将我的项目从CakePHP 3更新到CakePHP 4。我遇到的一个非常恼人的问题是,存储在Configy值中的'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);还有没有其他人遇到过(并且希望解决了)这个问题?
发布于 2020-12-10 01:48:38
正如评论中提到的,在最初从config/app.php读取配置之后,配置确实被重写了,并且为“debug”键设置了一个非布尔值。
https://stackoverflow.com/questions/65220233
复制相似问题