Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Request Data Bundle Laravel Package

bilyiv/request-data-bundle

View on GitHub
Deep Wiki
Context7

Request data bundle

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 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.

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.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core