@RequestParam, @RequestBody).willdurand/negotiation) enables flexible response formats (JSON/XML) without manual checks.User by ID without manual repository calls).Illuminate\Pipeline).Illuminate\Foundation\Http\FormRequest) and API Resources (Illuminate\Http\Resources\Json\JsonResource) provide more robust validation and serialization than this bundle’s generic approach.Illuminate\Http\Request extensions).Validator facade, custom rules).spatie/laravel-api for DTOs).ArgumentResolver).willdurand/negotiation is unmaintained (last release: 2017), risking compatibility issues with modern Symfony/Laravel.Route::bind(), FormRequest, API Resources) instead?Validator::errors(); this bundle lacks clarity)?Illuminate\Contracts\Container\BindingResolution).Illuminate\Http\Request extensions, Illuminate\Routing\Router).Illuminate\Validation\Factory).| Feature | Laravel Native/Alternatives | HttpExtraBundle |
|---|---|---|
| Query param binding | Route::bind(), Route::model() |
@RequestParam |
| Request body parsing | FormRequest, Illuminate\Http\Request |
@RequestBody |
| Content negotiation | spatie/negotiation (Symfony port) |
willdurand/negotiation |
| DTOs | spatie/laravel-data |
Automatic deserialization |
| Response formatting | JsonResource, Illuminate\Routing\ResponseFactory |
@Response |
Not recommended for greenfield Laravel projects. Instead:
@RequestParam:
Use Laravel’s route model binding:
Route::get('/user/{user}', [UserController::class, 'show']);
Or implicit binding:
Route::bind('user', function ($id) {
return User::findOrFail($id);
});
@RequestBody:
Use FormRequest for validation + parsing:
public function store(StoreUserRequest $request) {
$validated = $request->validated(); // Auto-parsed DTO
}
@Response:
Use JsonResource for API responses:
return new UserResource(User::find($id));
spatie/negotiation (Symfony port) or Laravel’s Accepts middleware.If forced to integrate:
Illuminate\Contracts\Container\Container extensions).Request class to support @RequestBody parsing (high risk of conflicts).Route::bind() or FormRequest.symfony/* packages (e.g., symfony/routing).@RequestParam(repository=...) would need custom mapping.@RequestParam for one route).Route::bind()).willdurand/negotiation).symfony/routing and symfony/http-foundation diverge from Symfony’s upstream.FormRequest is actively maintained and integrates with validation, localization, etc.spatie/laravel-data provides type-safe DTOs with zero runtime overhead.FormRequest docs, spatie/laravel-data GitHub).Route::bind()) are optimized for high traffic (e.g., queue workers, API gateways).| Risk | Impact | Mitigation |
|---|---|---|
| Bundle incompatibility | Breaks routes, DI, or middleware. | Isolate in a single controller. |
| Validation errors | Silent failures or incorrect error formats. | Use `Form |
How can I help you explore Laravel packages today?