rawnoq / laravel-form-data-parser
A Laravel package for parsing multipart/form-data requests
Installs: 27
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/rawnoq/laravel-form-data-parser
Requires
- php: ^8.2
- illuminate/http: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- symfony/http-foundation: ^7.0
Requires (Dev)
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.0
This package is not auto-updated.
Last update: 2025-11-13 14:52:09 UTC
README
A professional Laravel package for parsing multipart/form-data requests, especially useful for handling PUT, PATCH, and DELETE requests with file uploads.
Installation
composer require rawnoq/laravel-form-data-parser
The package will be automatically discovered and registered by Laravel.
Features
- ✅ Automatically parses
multipart/form-datarequests - ✅ Supports nested form fields with bracket notation (e.g.,
name[ar],name[en],items[0][name]) - ✅ Handles file uploads in PUT/PATCH/DELETE requests
- ✅ Converts flat keys to nested arrays automatically
- ✅ Robust error handling and edge case support
- ✅ Works seamlessly with Laravel's request handling
- ✅ Compatible with Laravel 11+ and Laravel 12+
- ✅ No configuration required
Usage
The package automatically registers a middleware that parses multipart/form-data requests. No configuration needed!
The middleware automatically:
- Parses multipart/form-data content
- Extracts form fields and files
- Converts bracket notation to nested arrays
- Makes data available via
$request->input()and$request->file()
Example
// In your controller public function update(Request $request) { // Access form data $name = $request->input('name'); $nameAr = $request->input('name.ar'); // Nested notation $itemName = $request->input('items.0.name'); // Array notation // Access files $avatar = $request->file('avatar'); $documents = $request->file('documents'); // Array of files // Process your request... }
Supported Form Field Formats
The package supports various form field formats:
// Simple fields name=John // Nested fields name[ar]=جون name[en]=John // Array fields items[0][name]=Item 1 items[1][name]=Item 2 // Mixed with files avatar=file name[ar]=جون
How It Works
The middleware intercepts requests with multipart/form-data content type and:
- Extracts the boundary from the request (multiple methods for reliability)
- Parses each part of the multipart data
- Identifies files vs regular form fields
- Creates temporary files for uploaded files
- Converts bracket notation to nested arrays
- Merges parsed data into the request object
- Handles errors gracefully without breaking the request
Supported Methods
The middleware processes requests for methods other than:
- GET
- HEAD
- POST (Laravel handles this natively)
This means it works with:
- PUT
- PATCH
- DELETE
- And other custom methods
Error Handling
The package includes comprehensive error handling:
- Invalid boundary detection with multiple fallback methods
- File creation errors are caught and handled
- Temporary file cleanup on errors
- Graceful degradation - if parsing fails, the request continues normally
- Debug logging in development mode
Requirements
- PHP 8.2+
- Laravel 11.0+ or Laravel 12.0+
🧪 Testing
The package comes with a comprehensive test suite:
# Run tests composer test # Run tests with coverage composer test-coverage
Test Coverage
The test suite includes:
- ✅ Form data parsing tests
- ✅ Nested fields and bracket notation tests
- ✅ File upload handling tests
- ✅ Middleware integration tests
- ✅ ServiceProvider registration tests
- ✅ Error handling tests
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.