afea / filament-testimonials
Testimonials module for the Afea Filament CMS package ecosystem: customer quotes with optional photo and video testimonials.
v0.1.0
2026-04-21 10:48 UTC
Requires
- php: ^8.4
- afea/filament-cms-core: @dev
- filament/filament: ^4.0
- filament/spatie-laravel-media-library-plugin: ^4.0
- illuminate/contracts: ^12.0
- illuminate/database: ^12.0
- illuminate/support: ^12.0
- laravel/prompts: ^0.3
- spatie/laravel-medialibrary: ^11.0
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^10.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
README
Testimonials module for the Afea Filament CMS package ecosystem.
Ships:
Testimonialmodel — photo + optional video via Spatie media collections- Reorderable Filament v4
TestimonialResource TestimonialsPluginafea:install:testimonialsinstaller
Installation
composer require afea/filament-testimonials php artisan afea:install:testimonials
Register in AdminPanelProvider:
->plugin(\Afea\Cms\Testimonials\Filament\TestimonialsPlugin::make())
Three common scenarios
1. Render active testimonials on the home page
use Afea\Cms\Testimonials\Models\Testimonial; $quotes = Testimonial::query()->active()->ordered()->get();
2. Video testimonials only
$videoQuotes = Testimonial::query() ->active() ->ordered() ->get() ->filter(fn (Testimonial $t) => $t->hasVideo());
3. Model override with a custom scope
class Testimonial extends \Afea\Cms\Testimonials\Models\Testimonial { public function scopeFeatured($q) { return $q->active()->where('order', '<=', 3); } }
'models' => ['testimonial' => \App\Models\Testimonial::class],