В настоящее время я обновляю свой проект с 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'
.
Я также поместил значение dd()
в свой метод AppController::initialize
, а также значение '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, или, возможно, в том, как оно извлекается.
Единственный способ, который я нашел для решения проблемы, - это принудительно преобразовать значение в логическое значение true
в AppController::initialize
, но, конечно, я хочу избежать этого. Добавление этой строки решает проблему, так что я могу продолжить отладку, но я, очевидно, не хочу использовать это как постоянное решение.
Configure::write('debug', true);
Кто-нибудь еще сталкивался (и, надеюсь, решил) с этим?
🤔 А знаете ли вы, что...
PHP - это акроним рекурсивного сокращения, означающего 'PHP: Hypertext Preprocessor'.