Closed pdrappo closed 6 years ago
Please help.
As long as no errors in the program everything works fine. But when there is an error it shows this message and not handling it properly.
Seems like the error handling is throwing errors. Need a quick fix.
Fatal error: Uncaught TypeError: Argument 3 passed to Slim\Handlers\ApiError::__invoke() must be an instance of Exception, instance of TypeError given in \src\Slim\Handlers\ApiError.php:37
Stack trace:
thrown in src\Slim\Handlers\ApiError.php on line 37
@pdrappo are you running PHP 5 or 7? I try to reproduce this.
@tuupola Mike, i'm using PHP 7 on CLI mode when i'm developing.
I am using PHP Version 7.1.1
The problem is that PHP \Error objects gets passed to \Slim\Handlers\ApiError::__invoke() method, wich is assuming \Exceptions instead of \Errors.
To reproduce that bug, try to create a todo with invalid json format:
curl "https://192.168.50.52/todos" --request POST --include --insecure --header "Authorization: Bearer $TOKEN" --header "Content-Type: application/json" --data "{ 'title': 'Test the API', 'order': 10 }"
Hotfix:
Comment out that lines in config/handlers.php:
$container["phpErrorHandler"] = function ($container) {
return $container["errorHandler"];
};
If you pass an Accept: application/json
header to your requests, you'll get simple json errors via the built-in Slim error handler.
If you want to handle PHP Errors as API Problems (like ApiError handler does), you have to implement a new error handler based on the built-in Slim PhpError class.
Quick fix for Php7 would be replacing \Exception with \Throwable for: https://github.com/tuupola/slim-api-skeleton/blob/f5231bc2472c678d9a6837f9275766ae415bc443/src/Slim/Handlers/ApiError.php#L37
See https://www.slimframework.com/docs/handlers/php-error.html for reference.
When some exceptions are throwed by Slim the ApiError handler can't handle it because the passed parameters are wrong.
Uncaught TypeError: Argument 3 passed to Slim\Handlers\ApiError::__invoke() must be an instance of Slim\Handlers\Exception, instance of UnexpectedValueException given in /home/ieasrl/intranet/src/Slim/Handlers/ApiError.php:19
For example if i upload the project to the server, create a virtualHost and i forgot to give 777 cmod permission to log folder this could happend.
I can't understand what is really wrong or if ApiError must work different. So i have to comment handlers to see the error in apache log.
Other error when handler.php is not commented is: [Thu Aug 10 10:16:44.159886 2017] [:error] [pid 14888] [client 10.0.2.247:51490] PHP Notice: Array to string conversion in /home/ieasrl/intranet/vendor/tuupola/dbal-psr3-logger/src/Psr3Logger.php on line 40