kirsankifat / request-data-bundle
Represents request data in a structured and useful way.
Installs: 35
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^7.4|^8.0
- 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-04-18 18:08:52 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-Type
header. - Representing and normalizing query parameters for the
GET
request method. - Representing
form
,json
,xml
request body for thePOST
,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.
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.