goed / laravel-protocontroller
Add Route::protocontroller() for protobuf-over-HTTP resource controllers with FormRequest reuse in Laravel.
0.1.0
2026-07-25 21:43 UTC
Requires
- php: ^8.3
- google/protobuf: ^5.35
- illuminate/contracts: ^11.0 || ^12.0 || ^13.0
- illuminate/http: ^11.0 || ^12.0 || ^13.0
- illuminate/routing: ^11.0 || ^12.0 || ^13.0
- illuminate/support: ^11.0 || ^12.0 || ^13.0
Requires (Dev)
- laravel/pint: ^1.27
- phpunit/phpunit: ^11.0 || ^12.0
README
A Laravel package providing a Route::protocontroller() macro for protobuf-over-HTTP resource controllers with FormRequest reuse.
Installation
composer require teunw/laravel-protocontroller
Usage
Register protobuf resource routes with message types and FormRequest bindings:
Route::protocontroller('users', UserController::class, [ 'messages' => [ 'store' => CreateUserRequest::class, 'update' => UpdateUserRequest::class, ], 'form_requests' => [ 'store' => UserFormRequest::class, 'update' => UserFormRequest::class, ], 'responses' => [ 'index' => UserCollectionResponse::class, 'show' => UserResponse::class, 'store' => UserResponse::class, 'update' => UserResponse::class, ], ]);
The macro auto-registers protobuf.decode and protobuf.encode middleware aliases.
Publish the config:
php artisan vendor:publish --tag=protocontroller-config
How it works
- Incoming requests are intercepted by the
protobuf.decodemiddleware, which deserializes the protobuf body into a Laravel-friendly structure. - If a
form_requestis mapped for the action, validation runs against the decoded data via a standard FormRequest. - The controller receives a clean
ProtobufRequestwith validated data. - The response returned by the controller is serialized back to protobuf by the
protobuf.encodemiddleware using the mappedresponseclass.