Filament 3 mengubah cara kita develop CRUD di Laravel. Alih-alih bikin controller, view, dan form validation manual, Filament menangani semua itu dengan cuma perlu generate Resource dan tulis beberapa baris config. Hasilnya? Admin panel modern, responsif, dan siap production — tanpa modal tambahan.
Artikel ini tidak cuma teori. Kami kasih step-by-step langsung dari clone project sampai bisa akses admin panel di browser lokal kamu.
Struktur Project & Folder
Source code kita punya struktur standar Laravel 11 dengan penambahan folder Filament:
laravel-filament-crud/
├── app/
│ ├── Models/
│ │ ├── Product.php
│ │ ├── Category.php
│ │ └── User.php
│ ├── Filament/
│ │ └── Resources/
│ │ ├── ProductResource.php
│ │ └── CategoryResource.php
│ └── Http/
│ └── Middleware/
├── database/
│ ├── migrations/
│ └── seeders/
├── resources/
│ └── views/
├── .env
├── .env.example
└── composer.jsonFolder app/Filament/Resources/ adalah jantung admin panel kita — di sini Resource Filament dikonfigurasi dan diatur fieldnya.
Install & Setup Project
Kamu perlu PHP 8.2+, Composer, dan MySQL/SQLite siap. Ikuti langkah berikut:
- Clone atau download project:
git clone https://github.com/duamasa-tech/laravel-filament-crud.git cd laravel-filament-crud - Install dependencies:
composer install - Copy .env file:
cp .env.example .env - Generate app key:
php artisan key:generate - Setup database di .env:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_filament DB_USERNAME=root DB_PASSWORD= - Jalankan migration:
php artisan migrate --seed - Start dev server:
php artisan serve - Akses admin panel: Buka
http://localhost:8000/admindan login dengan emailadmin@example.compasswordpassword
Model & Database Structure
Project ini punya 3 model utama: User, Category, dan Product. Relasi: User has many Products, Category has many Products.
Berikut contoh Model Product:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Product extends Model
{
protected $fillable = ['name', 'description', 'price', 'category_id', 'user_id', 'stock'];
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}Dan migration-nya:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->decimal('price', 10, 2);
$table->foreignId('category_id')->constrained();
$table->foreignId('user_id')->constrained();
$table->integer('stock')->default(0);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('products');
}
};Filament Resource & Admin Panel
Ini bagian magic. Resource Filament handle semua CRUD — Create, Read, Update, Delete — tanpa kita perlu tulis form manual:
<?php
namespace App\Filament\Resources;
use App\Models\Product;
use Filament\Resources\Resource;
use Filament\Forms;
use Filament\Tables;
use Filament\Forms\Form;
use Filament\Tables\Table;
class ProductResource extends Resource
{
protected static ?string $model = Product::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(255),
Forms\Components\Textarea::make('description')
->columnSpanFull(),
Forms\Components\TextInput::make('price')
->numeric()
->required(),
Forms\Components\Select::make('category_id')
->relationship('category', 'name')
->required(),
Forms\Components\Select::make('user_id')
->relationship('user', 'name')
->required(),
Forms\Components\TextInput::make('stock')
->numeric()
->default(0),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')
->searchable(),
Tables\Columns\TextColumn::make('price')
->money('usd'),
Tables\Columns\TextColumn::make('category.name'),
Tables\Columns\TextColumn::make('stock'),
Tables\Columns\TextColumn::make('created_at')
->dateTime(),
])
->filters([])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
}Resource ini handle semuanya: form input dengan tipe data tepat, table display dengan search dan sorting, serta bulk actions. Filament juga auto-generate sidebar menu, validasi, pagination, dan dark mode — tanpa kita konfigurasi lagi.
Keuntungan Filament 3 vs CRUD Manual
- Waktu development 80% lebih cepat — Cuma perlu tulis Resource dan Form schema, sisanya Filament generate
- UI/UX sudah modern — Responsive, dark mode, accessibility built-in, tanpa CSS tambahan
- Validation & authorization terintegrasi — Setup gate/policy di satu tempat
- Extensible tanpa kompleks — Tambah custom field, action, atau table filter dengan 10 baris code
- Dokumentasi lengkap — Community besar dan dokumentasi resmi excellent
Tips Customization
Setelah project running, kamu bisa customize lebih lanjut:
- Ubah branding: edit
config/filament.phpuntuk logo dan warna tema - Tambah relasi baru: generate Resource dengan
php artisan make:filament-resource --model=ModelName - Custom validasi: gunakan
->rules()di Form schema atau Rule class Laravel - Permission & Role: install package
filament/spatie-laravel-permissionuntuk multi-role admin
Kesimpulan
Source code Laravel 11 + Filament 3 ini adalah starting point sempurna untuk project kamu berikutnya — entah itu portfolio, client work, atau sekadar eksperimen. Setup cuma 8 langkah, dan kamu langsung punya admin panel production-ready. Tidak perlu bikin form manual, controller logic untuk CRUD, atau struggle dengan form validation — Filament handle semuanya.
Dari sini, kamu bisa eksplorasi fitur Filament lebih dalam, tambah authentication dengan Laravel Breeze, atau deploy ke cloud. Kalau pengin memperdalam Laravel lebih lanjut, cek artikel kami tentang optimization, testing, dan advanced topics di blog DuaMasa Tech.