Логическое значение, читаемое как строка в конфигурации CakePHP 4

В настоящее время я обновляю свой проект с 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'.


313
1

Ответ:

Решено

Как упоминалось в комментариях, конфигурация действительно была переписана после того, как она была первоначально прочитана из config/app.php, и для ключа «отладка» было установлено нелогическое значение.