multek / laravel-feedback
Headless, customizable user feedback collection for Laravel with flexible metadata
v1.0.0
2026-04-01 17:59 UTC
Requires
- php: ^8.2
- illuminate/contracts: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^9.0|^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
This package is auto-updated.
Last update: 2026-04-01 18:22:36 UTC
README
A headless, customizable user feedback collection package for Laravel with a flexible metadata JSON column.
Installation
composer require multek/laravel-feedback
Publish the config and migration:
php artisan vendor:publish --tag=feedback-config php artisan vendor:publish --tag=feedback-migrations php artisan migrate
Usage
Via Facade
use Multek\LaravelFeedback\Facades\Feedback; // Create feedback $feedback = Feedback::create([ 'type' => 'bug', 'content' => 'The button does not work', 'user_id' => auth()->id(), 'metadata' => [ 'browser' => 'Chrome 120', 'page_url' => 'https://app.com/dashboard', ], ]); // Query feedback $bugs = Feedback::ofType('bug')->get(); $userFeedback = Feedback::forUser($user)->get(); $recent = Feedback::query()->recent(7)->get();
Via HasFeedback Trait
Add the trait to your User model:
use Multek\LaravelFeedback\Traits\HasFeedback; class User extends Authenticatable { use HasFeedback; }
Then use it:
$user->submitFeedback([ 'type' => 'feature', 'content' => 'Please add dark mode', 'metadata' => ['priority' => 'high'], ]); $user->feedbacks; // Collection of user's feedback
Via API (Optional)
Enable routes in config/feedback.php:
'route' => [ 'enabled' => true, 'prefix' => 'api/feedback', 'middleware' => ['api', 'auth:sanctum'], ],
Endpoints:
POST /api/feedback— Submit feedbackGET /api/feedback— List feedback (supports?type=filter, paginated)
Events
FeedbackReceived is dispatched on every feedback creation:
use Multek\LaravelFeedback\Events\FeedbackReceived; class SendSlackNotification { public function handle(FeedbackReceived $event): void { // $event->feedback } }
Metadata Validation
Optionally enforce metadata structure in config/feedback.php:
'metadata' => [ 'validation' => [ 'browser' => 'required|string', 'page_url' => 'sometimes|url', ], ],
Configuration
| Key | Default | Description |
|---|---|---|
user_model |
App\Models\User::class |
User model class |
table_name |
feedbacks |
Database table name |
route.enabled |
false |
Enable API routes |
route.prefix |
api/feedback |
Route prefix |
route.middleware |
['api', 'auth:sanctum'] |
Route middleware |
metadata.validation |
[] |
Metadata validation rules |
License
MIT