I am currently updating my project from CakePHP 3 to CakePHP 4.
A very annoying issue that I'm having is that the 'debug'
value stored in the Config is read as a string, rather than as a boolean.
This causes an error directly in CakePHP's internal classes.
This is the relevant part of 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),
...
In my .env
file I have this:
DEBUG=true
This, when used with filter_var
, evaluates to the boolean value true
, and should therefore save that in my config array.
This is the error that I'm getting:
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
I have taken a look at the BaseErrorHandler::handleError
method, and it does read the config to look for the value of the 'debug'
key.
And that value is a string with a value of '1'
.
I also have put a dd()
of the value in my AppController::initialize
method and also there the value is '1'
.
I also have tried editing the app.php config file, hardcoding the true
value:
<?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,
...
but the outcome doesn't change. I still get the error. So the problem isn't my .env
file or how the value is being read.
I think the problem lies in how the value is stored in CakePHP's internal config array, or maybe the way it's being retrieved.
The only way I've found to solve the problem is to force the value to a boolean true
in AppController::initialize
, but of course I want to avoid this. Adding this line solves the problem so that I can proceed further in my debugging, but I obviously don't want to use this as a permanent solution.
Configure::write('debug', true);
Has anyone else encountered (and hopefully solved) this?
My Answer:
php
return [
// Other configuration settings...
'debug' => env('DEBUG', false),
// More configuration settings...
];
In CakePHP 4, the `env()` function is used to read environment variables. By default, the `DEBUG` environment variable is set to `false` if not explicitly defined.
If you are experiencing issues with the `debug` value being read as a string, you can explicitly cast it to a boolean in your configuration file like so:
php
return [
// Other configuration settings...
'debug' => (bool)env('DEBUG', false),
// More configuration settings...
];
By casting the value to a boolean, you ensure that it is treated as such throughout your application.
Rate this post
3 of 5 based on 3186 votesComments