{"id":17001659,"url":"https://github.com/juliangut/slim-exception","last_synced_at":"2025-10-24T20:53:14.955Z","repository":{"id":57002832,"uuid":"98827578","full_name":"juliangut/slim-exception","owner":"juliangut","description":"Slim HTTP exceptions and exception handling","archived":false,"fork":false,"pushed_at":"2024-09-23T11:38:37.000Z","size":361,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-18T13:31:56.514Z","etag":null,"topics":["httpexceptions","slim-framework","whoops"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juliangut.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"juliangut"}},"created_at":"2017-07-30T22:09:12.000Z","updated_at":"2023-11-08T20:17:00.000Z","dependencies_parsed_at":"2024-03-05T23:27:01.437Z","dependency_job_id":"1777daa3-a587-4470-a41c-8fb571f3d7ae","html_url":"https://github.com/juliangut/slim-exception","commit_stats":{"total_commits":112,"total_committers":1,"mean_commits":112.0,"dds":0.0,"last_synced_commit":"612b3c33060ece7244ddf5bc56c2751d0be28dae"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliangut%2Fslim-exception","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliangut%2Fslim-exception/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliangut%2Fslim-exception/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliangut%2Fslim-exception/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juliangut","download_url":"https://codeload.github.com/juliangut/slim-exception/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244986229,"owners_count":20542978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["httpexceptions","slim-framework","whoops"],"created_at":"2024-10-14T04:25:42.145Z","updated_at":"2025-10-24T20:53:09.908Z","avatar_url":"https://github.com/juliangut.png","language":"PHP","funding_links":["https://github.com/sponsors/juliangut"],"categories":[],"sub_categories":[],"readme":"[![PHP version](https://img.shields.io/badge/PHP-%3E%3D8.0-8892BF.svg?style=flat-square)](http://php.net)\n[![Latest Version](https://img.shields.io/packagist/v/juliangut/slim-exception.svg?style=flat-square)](https://packagist.org/packages/juliangut/slim-exception)\n[![License](https://img.shields.io/github/license/juliangut/slim-exception.svg?style=flat-square)](https://github.com/juliangut/slim-exception/blob/master/LICENSE)\n\n[![Total Downloads](https://img.shields.io/packagist/dt/juliangut/slim-exception.svg?style=flat-square)](https://packagist.org/packages/juliangut/slim-exception/stats)\n[![Monthly Downloads](https://img.shields.io/packagist/dm/juliangut/slim-exception.svg?style=flat-square)](https://packagist.org/packages/juliangut/slim-exception/stats)\n\n# slim-exception\n\nAlternative Slim error handling with better response format negotiation, better exception logging and better development support\n\n## Installation\n\n### Composer\n\n```\ncomposer require juliangut/slim-exception\n```\n\n## Usage\n\nRequire composer autoload file\n\n```php\nrequire './vendor/autoload.php';\n\nuse Jgut\\Slim\\Exception\\Handler\\ErrorHandler;\nuse Jgut\\Slim\\Exception\\Whoops\\Handler\\ErrorHandler as WhoopsErrorHandler;\nuse Negotiation\\Negotiator;\nuse Slim\\Factory\\AppFactory;\nuse Whoops\\Run as Whoops;\n\n// Instantiate the app\n$app = AppFactory::create();\n\n// ...\n\n$callableResolver = $app-\u003egetCallableResolver();\n$responseFactory = $app-\u003egetResponseFactory();\n$logger = new Logger();\n\n$errorHandler = $inDevelopment \u0026\u0026 class_exists(WhoopsErrorHandler::class)\n    ? new WhoopsErrorHandler($callableResolver, $responseFactory, new Negotiator(), $logger)\n    : new ErrorHandler($callableResolver, $responseFactory, new Negotiator(), $logger);\n\n// Add Error Middleware\n$errorMiddleware = $app-\u003eaddErrorMiddleware($inDevelopment, true, true);\n$errorMiddleware-\u003esetDefaultErrorHandler($errorHandler);\n\n// ...\n\n$app-\u003erun();\n```\n\n### Renderers\n\nCustom error renderers are configured when using slim-exception error handlers. Fear not, out of the box ErrorHandler is a direct drop-in to change default Slim ErrorHandler\n\nYou can register your error renderers or completely change them\n\n```php\n$errorHandler = new ErrorHandler($callableResolver, $responseFactory, new Negotiator());\n\n// Set single error renderer\n$errorHandler-\u003esetErrorRenderer('application/xhtml+xml', MyCustomHtmlRenderer::class);\n\n// Completely replace error renderers\n$errorHandler-\u003esetErrorRenderers(['text/html' =\u003e MyCustomHtmlRenderer::class]);\n``` \n\n### Whoops\n\nDevelopers deserve a better and more informative error handling while in development environment\n\n[Whoops](https://github.com/filp/whoops) is a great tool for this purpose and its usage is integrated in this package. There is a special Whoops error handler which can be used as default exception handler for development\n\nGiven Whoops renderers are meant for development displayErrorDetails argument on `Slim\\Interfaces\\ErrorRendererInterface::__invoke` won't be considered and stacktrace will always be displayed\n\nThe example of how to include Whoops error handler is in the code above\n\nFor you to use this handler you'll need to require whoops first. Additionally, Symfony's var-dumper plays nice with whoops so require it too\n\n```\ncomposer require --dev filp/whoops\ncomposer require --dev symfony/var-dumper\n```\n\n## Handle all errors/exceptions\n\nIn order to fully integrate error handling with the environment you can register ExceptionHandler globally. In this way any triggered and unhandled error will be captured and treated by the error handler\n\n```php\nuse Jgut\\Slim\\Exception\\ExceptionHandler;\nuse Slim\\Factory\\AppFactory;\n\n// Instantiate the app\n$app = AppFactory::create();\n\n// ...\n// Create and register $errorHandler in error middleware\n\n$request = Psr17ServerRequestFactoryInterface::createServerRequest();\n\n$exceptionHandler = new ExceptionHandler($request, $errorHandler, $inDevelopment, true, true);\n$exceptionHandler-\u003eregisterHandling();\n\n// ...\n\n$app-\u003erun($request);\n\n// This error will be captured and gracefully handled\ntrigger_error('This is embarrassing', \\E_USER_ERROR);\n```\n\n## Upgrade from 2.x\n\n* Minimum PHP version is now 8.0\n* Minimum Whoops version is now 2.15 as custom Inspector has been removed in favor of Whoop's frame filters\n\n## Contributing\n\nFound a bug or have a feature request? [Please open a new issue](https://github.com/juliangut/slim-exception/issues). Have a look at existing issues before.\n\nSee file [CONTRIBUTING.md](https://github.com/juliangut/slim-exception/blob/master/CONTRIBUTING.md)\n\n## License\n\nSee file [LICENSE](https://github.com/juliangut/slim-exception/blob/master/LICENSE) included with the source code for a copy of the license terms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliangut%2Fslim-exception","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliangut%2Fslim-exception","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliangut%2Fslim-exception/lists"}