Represents request data in a structured and useful way.

Installs: 560

Dependents: 0

Suggesters: 0

Security: 0

Stars: 17

Watchers: 2

Forks: 2

Open Issues: 0


v1.3.0 2019-03-26 17:19 UTC


This bundle allows you to represent request data in a structured and useful way by creating request data classes.


  • Detecting how to extract data depends on request method and Content-Type header.
  • Representing and normalizing query parameters for the GET request method.
  • Representing form, json, xml request body for the POST, PUT, PATCH request methods.
  • Defining supported formats and throwing exception if the request format is unsupported.
  • Dispatching the finish event when request data is ready.


Run the following command using Composer:

composer require bilyiv/request-data-bundle


The default configuration is the following:

    prefix: App\RequestData


Create a request data class

namespace App\RequestData;

class PostRequestData implements FormatSupportableInterface
    public const DEFAULT_AUTHOR = 'none';

     * @var string
    public $title;

     * @var string
    public $author = self::DEFAULT_AUTHOR;

     * {@inheritdoc}
    public static function getSupportedFormats(): array
        return [Formats::FORM, Formats::JSON, Formats::XML];

Use it in your controller

namespace App\Controller;

class PostController extends AbstractController
     * @Route("/", name="action")
    public function action(PostRequestData $data)
       return new JsonResponse($data);

Make requests

All the following requests will return the same json response:

    "title": "Hamlet",
    "author": "William Shakespeare"

GET request:

curl -X GET ''

POST form request:

curl -X POST '' \
     -H 'Content-Type: application/x-www-form-urlencoded' \
     -d 'title=Hamlet&author=William+Shakespeare'

POST json request:

curl -X POST '' \
     -H 'Content-Type: application/json' \
     -d '{"title":"Hamlet","author":"William Shakespeare"}'

POST xml request:

curl -X POST '' \
     -H 'Content-Type: application/xml' \
     -d '<post><title>Hamlet</title><author>William Shakespeare</author></post>'

POST csv request throws an exception because of unsupported format:

curl -X POST '' \
     -H 'Content-Type: application/csv' \
     -d 'Hamlet,William Shakespeare'


This bundle is released under the MIT license. See the included LICENSE file for more information.