I am installing Monolog in Slim 4, but it is not working correctly and throws errors. Here is the trace:
Uncaught TypeError: {closure:/home/e24/www/test.com/orders/index.php:228}():
Argument #1 ($request) must be of type ServerRequestInterface,
Slim\Psr7\Request given, called in /home/e24/www/test.com/orders/slim/slim/slim/Slim/Middleware/ErrorMiddleware.php
on line 92 and defined in /home/e24/www/test.com/orders/index.php:235
Stack trace:
#0 /home/e24/www/test.com/orders/slim/slim/slim/Slim/Middleware/ErrorMiddleware.php(92): {closure:/home/e24/www/test.com/orders/index.php:228}()
#1 /home/e24/www/test.com/orders/slim/slim/slim/Slim/Middleware/ErrorMiddleware.php(79): Slim\Middleware\ErrorMiddleware->handleException()
#2 /home/e24/www/test.com/orders/slim/slim/slim/Slim/MiddlewareDispatcher.php(129): Slim\Middleware\ErrorMiddleware->process()
#3 /home/e24/www/test.com/orders/slim/slim/slim/Slim/MiddlewareDispatcher.php(73): Psr\Http\Server\RequestHandlerInterface@anonymous->handle()
#4 /home/e24/www/test.com/orders/slim/slim/slim/Slim/App.php(209): Slim\MiddlewareDispatcher->handle()
#5 /home/e24/www/test.com/orders/slim/slim/slim/Slim/App.php(193): Slim\App->handle()
#6 /home/e24/www/test.com/orders/index.php(2207): Slim\App->run()
#7 {main} thrown in /home/e24/www/test.com/orders/index.php on line 235
Code in slim 4:
//Optional: Define custom error logger
$logger = new Logger('error');
$logger -> pushHandler(new RotatingFileHandler('error.log'));
//Define Custom Error Handler
$custom_error_handler = function (
ServerRequestInterface $request,
Throwable $exception,
bool $display_error_details,
bool $log_errors,
bool $log_error_details
)
use ($app, $logger) {
if ($logger) {
$logger -> error($exception -> getMessage());
}
$payload = ['error' => $exception -> getMessage()];
$response = $app -> getResponseFactory() -> createResponse();
$response -> getBody() -> write(
json_encode($payload, JSON_UNESCAPED_UNICODE)
);
return $response;
};
// Add Error Middleware
$error_middleware = $app -> addErrorMiddleware(true, true, true, $logger);
$error_middleware -> setDefaultErrorHandler($custom_error_handler);
I want to create my own 404 error handling.