bilyiv / request-data-bundle
Represents request data in a structured and useful way.
Installs: 2 599
Dependents: 0
Suggesters: 0
Security: 0
Stars: 20
Watchers: 2
Forks: 4
Open Issues: 1
Type:symfony-bundle
pkg:composer/bilyiv/request-data-bundle
Requires
- php: ^7.2
 - symfony/config: ~3.4|~4.0
 - symfony/dependency-injection: ~3.4|~4.0
 - symfony/event-dispatcher: ~3.4|~4.0
 - symfony/http-kernel: ~3.4|~4.0
 - symfony/property-access: ~3.4|~4.0
 - symfony/serializer: ~3.4|~4.0
 
Requires (Dev)
- phpunit/phpunit: ^7
 
This package is auto-updated.
Last update: 2025-10-20 23:59:03 UTC
README
This bundle allows you to represent request data in a structured and useful way by creating request data classes.
Features:
- Detecting how to extract data depends on request method and 
Content-Typeheader. - Representing and normalizing query parameters for the 
GETrequest method. - Representing 
form,json,xmlrequest body for thePOST,PUT,PATCHrequest methods. - Defining supported formats and throwing exception if the request format is unsupported.
 - Dispatching the finish event when request data is ready.
 
Installation
Run the following command using Composer:
composer require bilyiv/request-data-bundle
Configuration
The default configuration is the following:
request_data: prefix: App\RequestData
Usage
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 'https://example.com?title=Hamlet&author=William+Shakespeare'
POST form request:
curl -X POST 'https://example.com' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'title=Hamlet&author=William+Shakespeare'
POST json request:
curl -X POST 'https://example.com' \ -H 'Content-Type: application/json' \ -d '{"title":"Hamlet","author":"William Shakespeare"}'
POST xml request:
curl -X POST 'https://example.com' \ -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 'https://example.com' \ -H 'Content-Type: application/csv' \ -d 'Hamlet,William Shakespeare'
License
This bundle is released under the MIT license. See the included LICENSE file for more information.