public static function exceptionHandler($app, $exception) { $response = $app->response(); $response->header('Content-type', 'application/json'); $httpCode = 500; $data = []; /** * Directus\Acl\Exception\AclException & subclasses */ if ($exception instanceof AclException || is_subclass_of($exception, 'Directus\\Acl\\Exception\\AclException')) { $httpCode = 403; $data = ['message' => $exception->getMessage()]; } elseif ($exception instanceof RelationshipMetadataException) { $httpCode = 424; $data = ['message' => $exception->getMessage()]; } elseif ($exception instanceof CustomUiValidationError) { $httpCode = 422; $data = ['message' => $exception->getMessage()]; } elseif ($exception instanceof DuplicateEntryException) { $httpCode = 409; $data = ['message' => $exception->getMessage()]; } else { $data = ['message' => __t('internal_server_error')]; if ('production' !== DIRECTUS_ENV) { $data = ['code' => $exception->getCode(), 'class' => get_class($exception), 'message' => $exception->getMessage(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'trace' => $exception->getTrace(), 'traceAsString' => $exception->getTraceAsString()]; } } $data = @json_encode($data); if ('production' !== DIRECTUS_ENV) { $data = JsonView::format_json($data); } http_response_code($httpCode); header('Content-type: application/json'); echo $data; exit; }