soft-passio/api-exception-bundle

catch all Symfony errors and convert it to problem json RFC7807 response

Installs: 1 117

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 5

Type:symfony-bundle

2.2 2020-06-17 12:32 UTC

This package is auto-updated.

Last update: 2024-10-29 05:52:25 UTC


README

Catch all Symfony 3.3 or newer errors and convert it to problem+json RFC7807 response

Installation:

Required the bundle with composer:

$ php composer.phar require soft-passio/api-exception-bundle

Add bundle to AppKernel:

<?php
    // app/AppKernel.php

    public function registerBundles()
    {
        $bundles = array(
            // ...
            
            new SoftPassio\ApiExceptionBundle\ApiExceptionBundle(),
        );
    }

Configuration:

SoftPassioApiProblemExceptionBundle automatically catch your errors by ApiExceptionSubscriber and return application/problem+json response:

{
  "detail": "Description of problem",
  "status": 404,
  "type": "about:blank",
  "title": "Not Found"
}

changing data structure:

Bundle provide ResponseFactoryInterface for overriding response data, if u want change response data.

Example usage:

to receive response like:

{
  "exception": {
      "detail": "Description of problem",
      "status": 404,
      "type": "about:blank",
      "title": "Not Found"
  }
}

create new CustomResponseFactory:

<?php

...
class FBExceptionResponseFactory implements ResponseFactoryInterface
{
    public function createResponse(ApiProblemInterface $apiProblem)
    {
        $data = $apiProblem->ToArray();

        $response = new JsonResponse(
            $this->prepareData($data)
        );

        $response->headers->set('Content-Type', 'application/problem+json');

        return $response;
    }

    public function prepareData($data)
    {
        return [
            'exception' => [
                $data
            ],
        ];
    }
}

Config reference:

soft_passio_api_exception:
    response_factory: SoftPassio\ApiExceptionBundle\Factory\ApiProblemResponseFactory
    enabled: true
    paths_excluded: ['/admin/']