Filament Nedir? Laravel ile Yönetim Paneli Rehberi
Kısaca: Filament, Laravel için açık kaynaklı bir yönetim paneli çatısıdır. Livewire, Alpine.js ve Tailwind CSS üzerine kuruludur; tablo, form, filtre, yetkilendirme ve dosya yükleme gibi panel ihtiyaçlarını hazır bileşenlerle karşılar. Kurumsal sitelerin içerik yönetimi, müşteri portalları ve iç operasyon araçları için güçlü bir seçimdir; tamamen özel bir kullanıcı deneyimi gereken, müşteriye dönük arayüzler için ise tek başına doğru araç değildir.
Son bir yılda Filament'in üç farklı ana sürümüyle canlı projeler geliştirdim: bir hukuk bürosu sitesinde v3, Sardur Mühendislik platformunda v4 ve bir klinik psikolog sitesinde v5. Bu yazı, "Filament kullanmalı mıyım?" sorusuna bu deneyimden verdiğim cevap.
Filament nedir?
Filament, Laravel uygulamalarına yönetim paneli eklemek için kullanılan bir paket ailesidir. Bir veritabanı tablosu için listeleme, oluşturma, düzenleme ve silme ekranlarını (CRUD) dakikalar içinde ortaya çıkarır; bunu da PHP kodu yazarak yaparsınız, ayrı bir JavaScript uygulaması gerekmez.
Temel yapı taşları şunlardır:
- Resource: Bir Eloquent modelinin paneldeki karşılığı. Listeleme, form ve sayfaları bir arada tanımlar.
- Form bileşenleri: Metin, seçim kutusu, tarih, zengin metin, markdown, dosya ve görsel yükleme, etiket girişi gibi alanlar.
- Tablolar: Sıralama, arama, filtre, toplu işlem ve sütun bazlı biçimlendirme.
- Actions: Bir kayıt üzerinde tek tıkla çalışan işlemler; örneğin "müşteriye bildirim gönder".
- Widget'lar ve sayfalar: Panel ana sayfasındaki özet kartları ve özel ayar sayfaları.
Bir Filament resource nasıl görünür?
Aşağıdaki örnek, bu portfolyo sitesindeki proje yönetiminden sadeleştirilmiştir (Filament v4 sözdizimi):
public static function form(Schema $schema): Schema
{
return $schema->components([
Section::make('Künye')->columns(2)->schema([
TextInput::make('title')->label('Başlık')->required(),
Select::make('category')
->label('Bölüm')
->options(ProjectCategory::options())
->required(),
TagsInput::make('stack')->label('Teknolojiler'),
FileUpload::make('gallery')
->label('Galeri')
->image()
->multiple()
->reorderable(),
]),
]);
}
Bu birkaç satır; doğrulamalı bir form, sürükle-bırak sıralanabilen çoklu görsel yükleme ve etiket girişi üretir. Aynı ekranı elle yazmak günler sürerdi.
Filament ne zaman doğru seçim?
Projelerimde Filament'i şu durumlarda tercih ettim:
- İçeriği müşteri yönetecekse: Hizmet sayfaları, blog, sık sorulan sorular, ayarlar. Kurumsal sitelerde firmanın geliştiriciye bağımlı kalmaması en değerli kazanımdır.
- İç operasyon aracı gerekiyorsa: Müşteri kayıtları, bakım kayıtları, gelen mesajlar. Paneli birkaç kişi kullanır; hız ve tutarlılık, özgün tasarımdan önemlidir.
- Zaman kısıtlıysa: CRUD, yetkilendirme, dosya yükleme ve arama hazır geldiği için tasarım emeğini müşterinin göreceği tarafa ayırabilirsiniz.
Filament ne zaman yetmez?
- Müşteriye dönük, markaya özel arayüzler: Kurumsal sitenin herkese açık yüzü ya da müşteri portalının vitrini için Blade, Tailwind ve gerekirse Livewire ile özel tasarım daha doğru sonuç verir. Sardur projesinde panel Filament'le, müşteri portalı ise özel arayüzle yapıldı.
- Çok karmaşık, adım adım iş akışları: Panel bileşenleriyle kurulabilir ama bir noktadan sonra özel sayfa yazmak daha okunaklıdır.
- Ayrı bir SPA veya mobil uygulama gerekiyorsa: Filament sunucu taraflı bir yaklaşımdır; API öncelikli mimarilerde rolü sınırlıdır.
Tek tıkla işlem: Filament actions
Sardur Mühendislik projesinde firma sahibi; temizlik sonrası görsel ve videoları ilgili kayda yükledikten sonra müşterisine tek tıkla bilgilendirme e-postası gönderebiliyor. Filament'te bu tür işlemler bir action olarak tanımlanır. Mantığı gösteren sadeleştirilmiş bir örnek:
Action::make('notifyCustomer')
->label('Müşteriyi bilgilendir')
->icon('heroicon-o-envelope')
->requiresConfirmation()
->visible(fn (Record $record) => $record->media()->exists())
->action(function (Record $record) {
Mail::to($record->customer->email)
->queue(new ServiceCompleted($record));
Notification::make()->title('E-posta gönderildi')->success()->send();
});
Burada önemli olan iki karar var: düğme yalnızca kayda içerik eklendiğinde görünür ve gönderim otomatik değil, işi yapan kişinin onayıyla tetiklenir.
Sürüm farklarına dikkat: v3, v4 ve v5
Üç sürümle çalışırken en çok zaman alan şey, sürümler arası farkları doğru okumaktı:
- v3 → v4: Form ve bilgi ekranları ortak bir Schema yapısına taşındı.
Form $formyerineSchema $schemakullanılıyor;SectionveTabsgibi düzen bileşenleriFilament\Schemas\Componentsaltına geçti. Tablo satır işlemleri derecordActions()ile tanımlanıyor. - v4 → v5: Temel kavramlar korunuyor; yükseltme öncesinde resmî yükseltme kılavuzunu okumak ve paketlerin sürüm uyumluluğunu kontrol etmek yeterli oluyor.
Pratik öneri: Yeni bir projeye başlarken en güncel kararlı sürümü seçin ve internetteki eski sürüm örneklerini doğrudan kopyalamadan önce sürümünü kontrol edin.
Yetkilendirme: paneli kim görür?
Filament, Laravel'in policy yapısını doğrudan kullanır. Bir modelin policy sınıfında tanımlanan viewAny, update, delete gibi kurallar paneldeki düğmeleri ve sayfaları otomatik olarak gizler veya açar. Panele kimlerin girebileceği ise kullanıcı modelinde tanımlanır. Kural basit: Yetki kontrolü arayüzde değil, policy ve sorgu katmanında yapılmalıdır.
Sıkça sorulan sorular
Filament ücretli mi?
Hayır. Filament açık kaynaklıdır ve MIT lisansıyla ücretsiz kullanılabilir. Topluluk ve ticari eklentiler ayrıca mevcuttur.
Filament ile Laravel Nova arasındaki fark nedir?
İkisi de Laravel için yönetim paneli çözümüdür. Nova Laravel ekibinin ücretli ürünüdür ve Vue tabanlıdır; Filament ise açık kaynaklıdır ve Livewire, Alpine.js ve Tailwind CSS üzerine kuruludur.
Filament ile müşteri portalı yapılabilir mi?
Evet; Filament birden fazla panel tanımlamaya izin verdiği için müşteriye özel bir panel kurulabilir. Ancak markaya özel bir deneyim gerekiyorsa portalın görünen yüzünü Blade ve Livewire ile özel tasarlamak daha iyi sonuç verir.
Filament öğrenmek için ne bilmek gerekir?
Laravel'in temel kavramları (Eloquent modelleri, ilişkiler, doğrulama, policy) yeterlidir. Livewire bilgisi özel bileşen yazarken işe yarar, ancak başlangıç için zorunlu değildir.
Filament v3'ten v4'e geçiş zor mu?
Kavramlar aynı kalıyor, ancak form ve düzen bileşenlerinin isim alanları değiştiği için kodun güncellenmesi gerekiyor. Resmî yükseltme kılavuzu ve otomatik yükseltme aracı işin büyük kısmını kolaylaştırıyor.