RFC7807 Problem details integration for Symfony

Installs: 114 543

Dependents: 0

Suggesters: 0

Security: 0

Stars: 19

Watchers: 6

Forks: 8

Open Issues: 2


v1.5.0 2022-11-25 12:29 UTC

This package is auto-updated.

Last update: 2023-03-25 13:07:56 UTC


Installs Packagist

Api Problem Bundle

This package provides a RFC7807 Problem details exception listener for Symfony. Internal, this package uses the models provided by phpro/api-problem. When an ApiProblemException is triggered, this bundle will return the correct response.


composer require phpro/api-problem-bundle

If you are not using symfony/flex, you'll have to manually add the bundle to your bundles file:

// config/bundles.php

return [
    // ...
    Phpro\ApiProblemBundle\ApiProblemBundle::class => ['all' => true],

Supported response formats

  • application/problem+json

How it works

use Phpro\ApiProblem\Exception\ApiProblemException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class SomeController
     * @Route('/some-route', defaults={"_format" = "json"})
    public function someAction() {
        throw new ApiProblemException(
            new HttpApiProblem('400', 'It aint all bad ...')

When the controller is marked as a "json" format, the request Content-Type is */json or the request Accept header first value contains json (i.e. application/json, text/html), this bundle kicks in. It will transform the exception to following response:


Content-Type: application/problem+json


    "status": 400,
    "type": "http:\/\/\/Protocols\/rfc2616\/rfc2616-sec10.html",
    "title": "Bad Request",
    "detail": "It ain't all bad ..."

As an alternative, use ApiProblemHttpException instead of ApiProblemException, to make it possible to exclude the specific status code from the log

Adding custom exception transformations

Currently, we automatically transform exceptions from following packages to an ApiProblem instance:

  • phpro/api-problem
  • symfony/http-kernel
  • symfony/security

Besides that, all other errors are transformed to a basic ExceptionApiProblem instance.

If you want to add custom transformations, you can implement the ExceptionTransformerInterface and register it in the symfony container with the phpro.api_problem.exception_transformer tag.

use Phpro\ApiProblemBundle\Transformer\ExceptionTransformerInterface;

class MyTransformer implements ExceptionTransformerInterface
    public function transform(\Throwable $exception): ApiProblemInterface
        return new MyApiProblem($exception);

    public function accepts(\Throwable $exception): bool
        return $exception instanceof MyException;


Submitting bugs and feature requests

Bugs and feature request are tracked on GitHub. Please take a look at our rules before contributing your code.


api-problem-bundle is licensed under the MIT License.