Geçen yıl iki ay boyunca FilamentPHP üzerinde bir içerik yönetim sistemi oluşturmaya çalıştım. Nedenlerim vardı. Filament, Laravel ekosisteminde en iyi işlenmiş yapıydı. Saygı duyduğum her Laravel geliştiricisi bunu kullanıyordu. Müşteri çalışmaları için iki yönetim paneli göndermiştim ve bunlar hızlı bir şekilde ortaya çıkmıştı.
Üçüncü proje farklıydı — bir blog, sayfalar, menü, yönlendirmeler, SEO meta bilgileri, programlanmış gönderiler ve gerçek bir halkla ilişkiler teması içeren bir pazarlama sitesi. Aynı yığın, aynı DSL, aynı hız dedim. Yanıldım, bunu öğrenmem beklediğimden daha uzun sürdü.
Öğrendiğim şey bu, farklı ne yapardım ve neden sonunda başka bir şey inşa ettim.
Kısa Özeti: Filament, admin panellerini kendi veri modelinize göre oluşturmak için harika bir yapı. Bir CMS değil ve onu CMS olarak kullanmaya çalışmak, sessizce pahalı bir yol. Veri modeliniz tasarlamak sizin elinizdeyse Filament’i seçin. “Gönderi, sayfa, medya, menü, SEO, yönlendirme” gibi bir veri modeliniz varsa — bu sorun 20 yıldır çözüldü ve onu yeniden inşa etmeye değmez.
Filament Üzerinde Yaptığım Şey
Filament Üzerinde Yaptığım Şey
Projem bir küçük SaaS için bir pazarlama sitesi oldu — ana sayfa, ~6 pazarlama sayfası, bir blog, bir belgeler bölümü, kategori filtrenmiş vaka çalışmaları dizini. Standart küçük işletme CMS çalışması.
İlk Filament iskeletim aşağıdaki gibiydi:
-
PostResource— başlık, slug, içerik (Tiptap alanı), öne çıkan görsel (Filament medya eklentisi), durum enum, programlanmış zaman, SEO başlığı, meta açıklaması, kategori ilişki yöneticisi -
PageResource— neredeyse benzer, artı bir düzen enum ve bölüm blokları -
CategoryResource— başlık, slug, parent, sıralama düzeni -
MenuResource— isim + menü öğeleri için bir tekrarlayıcı -
MediaResource— ekip yüklemeleri göz atabilsin diye Spatie Medya Kütüphanesi ile sarmaladı -
RedirectResource— URL’den URL’ye, durum kodu, is_active
Bunları iki günde yazdım. Filament’in form DSL’si gerçekten iyi — TextInput::make(), Select::make(), koşullu alanlar, ilişki yöneticileri. İki günde kaynak tanımları yaptım ve CMS adminini görsel olarak elde ettim.
Sonra geriye kalan her şeyi inşa etmek için sonraki sekiz haftayı harcadım.
Filament’in Sunmadığı Şeyler
Filament’in Sunmadığı Şeyler
CMS için Filament önerildiğinde kimsenin sana anlatmadığı kısım burası. Kaynakları bir hafta sonunda iskeletini oluşturuyorsun ve sonra Filament’in şu konuları dikkate almadığını anlıyorsun:
- Halkla ilişkiler sitesi. Filament yalnızca admin’e yöneliktir. İçeriğin yayımlandığı gerçek website mevcut değildir. Blade veya Inertia’yı kullanarak sıfırdan inşa etmen gerekiyor.
- Tema sistemi. Tema sistemi yok, şablon değiştirici yok, geliştirici olmayan kullanıcıların görünümü değiştirmesi için bir yer yok. Pazarlama yeni bir ana sayfa düzeni istediklerinde, Blade dosyalarını düzenleyip dağıtım yapman gerekiyor.
- Bölümler / sayfa oluşturucu. Blok tabanlı bir bölüm sistemi yok. Pazarlama ekibi “istatistikler” bölümünü “tavsiyeler” bölümünün üzerine istediklerinde bu bir geliştirici görevidir. Filament’in tekrarlayıcı alanını bir bölüm oluşturucu olarak bağlamayı denedim — kısmen çalıştı, bir haftamı aldı ve düzenleme kullanıcı deneyimi, gerçek bir CMS’den daha kötüydü.
- Medya kütüphanesi dışında kaynak. Filament’in medyası alan başına. Formdan göz atabilirsin. Editörlerin “üç ay önce kullandığımız o fotoğrafı” bulabileceği global bir medya kütüphanesi yok. Curator eklentisi seni kısmen oraya götürüyor — 49 $ ve hala WordPress’in medya kütüphanesinin barını karşılamıyor, bu 15 yıl önce belirlenmişti.
- Slug geçmişi. Gönderi slug’ını yeniden adlandırdığında, eski URL 404 hatası veriyor. Filament slug geçmişini izlemiyor. Bunu bir model + middleware ile kendin inşa etmen gerekiyor. Ben yaptım. Yarım günde hallettim ama iki gün boyunca uç durumları ayarlamam gerekti.
- Gerçek SEO kayıtları.
seo_title,meta_desc,og_image_urlsütunlarını her kaynağa ekledim. Ardından sitemap.xml’ye ihtiyaç duydum. Sonra robots.txt’e. Sonra JSON-LD şeması gönderileri ve sayfalar için. Ardından her sayfa için Open Graph geri dönüşüne. Bunların her biri, her CMS’nin zaten sunduğu kendi kod öğeleridir. - Yönlendirmelerle birlikte hit takibi. Bunu kendim inşa ettim. Bir model, bir admin kaynağı, is_active’i dikkate alan bir middleware. CSV aktarımını da yaptım.
- Bir sitemap üretici. Her kaynak türünü gezerek, yayımlanan satırları sorgulayıp, XML çıktısı üreten bir servis, mantıklı bir şekilde önbelleğe alır. İki gün.
- Bir yorum sistemi. Blog için buna ihtiyacım vardı.
beyondcode/laravel-comments(iyi bir paket) inceledim, bağlantısını kurdum, bir moderasyon kuyruğu inşa ettim, Livewire ile “yanıtla” arayüzü oluşturdum. Bir hafta daha.
Listeyi burada durduruyorum. Aynı zamanda altı haftada CMS’nin yarısını yeniden icat ettiğimi anladım ve elimdeki yarı, gerçek bir CMS’nin bana sunabileceği yarıdan daha iyi değildi.
Zamanı Gizlice Yakan DX Modeli
Zamanı Gizlice Yakan DX Modeli
Filament’in admin içindeki geliştirici deneyimi gerçekten harika. DSL sıkı, belgeler net, bileşenler iyi işlenmiş. Admin içinde. Admin dışındaki DX — halkla ilişkiler sitesi, editörlerin iş akışı, dağıtım hikayesi — tamamen senin inşa ettiğin şey.
Burada bir tuzak var. Her “ben bunu Filament’te yaparım” kararı küçük görünüyor:
- “Hz sadece halkla ilişkiler için bir Blade şablonu bağlayacağım.” — 2 saat
- “Hz sadece bir sitemap.xml yönü ekleyeceğim.” — 3 saat, önbellek katmanı dahil
- “Hz sadece Filament’in tekrarlayıcısı ile minik bir bölüm sistemi kuracağım.” — 2 gün
- “Hz sadece bir slug-histori middleware yazacağım.” — yarım gün
- “Hz sadece bir yorum tablosu ve moderasyon UI ekleyeceğim.” — 4 gün
- “Hz sadece kaynak dışındaki bir medya kütüphanesi sayfası inşa edeceğim.” — 3 gün
- “Hz sadece yeniden sıralabilir bölümlere sahip bir ana sayfa editörü ekleyeceğim.” — bir buçuk hafta
Hepsini topladığında. Gerçekte sahip olmamız gereken pazarlama sitesinin üstüne sekiz haftalık CMS yeniden inşa çalışması oldu. Bu işlerin hiçbiri kötü değildi — başka birinin zaten yaptığı işti, paketlenmiş ve gönderilmişti.
Zor yoldan öğrenmem gereken model: “Post”, “Page”, “Category”, “Media”, “Menu”, “Redirect” ve “SeoMeta” için admin kaynakları inşa etmeye başladığında, uygulaman için admin değil, CMS inşa ediyorsun. Ve zaten CMS’ler var.
Filament, bu CMS için form kütüphanesini sağlıyor. CMS’yi değil.
Farklı Ne Yapardım
Farklı Ne Yapardım
Bugün aynı projeye başlasaydım, önce farklı bir soru sorardım.
Sorduğum soru: “En iyi Laravel admin çerçevesi nedir?” Bu sorunun cevabı her zaman Filamenttir. Bu, doğru bir cevap.
Sormam gereken soru: “Bir CMS veri modelim var mı, yoksa özel bir veri modelim mi?”
Eğer veri modeli Order, Shipment, Invoice, Customer, SupportTicket, Subscription, LabSample ise — bu özel bir veri modelidir. Filament doğru araçtır. Filament’teki esneklik (admin’i tanımlamak, Filament’in render etmesi) tam da ihtiyacınız olan şeydir çünkü kimse sizin veri modeliniz için sizin yönetinizi gönderemedi.
Eğer veri modeli Post, Page, Category, Media, Menu, Redirect, SeoMeta ise — bu bir CMS veri modelidir. Bu çözülmüş. Doğru araç bir CMS’dir ve ne için ödediğiniz, admin’i tasarlama özgürlüğü değil — admin’i atlama özgürlüğü. CMS bu kısımda, 2003’ten beri her CMS’nin yaptığı gibi çalışıyor ve bu da iyi, çünkü kullanıcılar zaten bunun nasıl çalıştığını biliyor.
Bu ayırımı öğrenmek için iki ay harcadım. Bunu yazıyorum ki siz bunun için zaman harcamayın.
Filament’in Gerçekten En İyi Olduğu Şeyler
Filament’in Gerçekten En İyi Olduğu Şeyler
Burada dikkatli olmalıyım çünkü “Filament harika ama X için değil” demek alaycı gibi geliyor ve Laravel topluluğunda buna yeterince maruz kalıyoruz. Filament’in gerçekte, inşa etmek istemediğim şeyler için en iyisi.
Özel iç yönetimler. Rotaları, sürücüleri, araçları, teslimatları yöneten bir lojistik şirketi için bir arka ofis aracı. Bir pazaryeri için bir moderasyon kuyruğu. Bir SaaS destek ekibi için bir operasyon panosu. Bunlar özel veri modelleridir. Filament kazanır.
SaaS ürün panoları. Kullanıcının kendi kaynaklarını (projeler, API anahtarları, faturalama ayarları) yönettiği bir ürün içerisinde müşteri yüzlü panolar. Filament’in v3+ sürümündeki çoklu panel desteği bunu temiz hale getiriyor.
Form-ağır uygulamalar. Eğer uygulamanız temelde formlar içeriyorsa — anket oluşturucular, başvuru işleme, laboratuvar veri girişi — Filament’in form DSL’si Laravel ekosistemindeki en iyi düzeydedir. Başka bir şey buna yaklaşamaz.
Yapılandırma kodu biçimini tercih eden takımlar. Bazı takımlar, admin’in şeklini PHP dosyalarında yaşamak istiyorlar, PR’lerde gözden geçirilebilir, her başka kod değişikliği gibi dağıtılabilir. Filament, bu iş akışına mükemmel uyuyor. Editörlerin, üretim yoluyla bir admin UI üzerinden ana sayfa düzenini değiştirdikleri bir CMS bu iş akışının tam tersidir. Her ikisi de geçerlidir; farklı takımlara uyar.
Bir moderasyon aracı, bir iç yönetim, bir SaaS paneli, özel bir veri modeli gönderen birisini gördüğümde, onlara Filament’i öneriyorum. Ve bunu kastediyorum.
Bunun Yerine Ürettiğim Şey
Bunun Yerine Ürettiğim Şey
Bunu kısa tutacağım çünkü bu yazı benimle ilgili değil. Filament’i CMS olarak kullanma deneyiminden sonra, UnfoldCMS inşa ettim — Laravel 12 + React 19 + shadcn/ui CMS. İçerik modeli sabit: Post dört content_type değeri (gönderi, sayfa, açılış, blok) ile, Spatie üzerinden medya, kategoriler, yorumlar, menüler, yönlendirmeler, SEO meta, temalı bir halka açık site, halka açık REST API. Tek seferlik lisans, kategoriye göre 39 $ ile 799 $ arasında değişiyor.
Onu Filament’in kötü olduğu için inşa etmedim. Filament kötü değil. Onu, pazarlama siteleri için gereken şekil — sabit içerik modeli, temalı ön yüz dahil, geliştirici dışı editör iş akışı — için yanlış bir yapı olduğu için inşa ettim. Bu yüzden Filament’i bu şekle sokmak yerine, o şekil için farklı bir araç inşa ettim.
Eğer bunlar arasında seçiyorsanız, UnfoldCMS ve Filament karşılaştırması, hangi aracın hangi işe uyduğunu daha ayrıntılı olarak ortaya koyar.
Dürüst Karar Ağacı
Dürüst Karar Ağacı
Eğer şu anda bir Laravel geliştiricisiyseniz, bir sonraki yönetim veya CMS projeniz için ne kullanacağınıza karar vermek için soru şu:
Veri modelini mi tasarlıyorsunuz?
- Hayır → Filament. Alanınız benzersiz, admin buna göre şekillendirilmelidir ve Filament’in DSL’si bu çalışma için ekosistemdeki en iyi şeydir.
- Evet, bu bir CMS veri modeli → CMS. UnfoldCMS, Statamic, Kirby ya da takımınız WordPress şeklindeyse WordPress. Zaten gönderilmiş olanı yeniden inşa etmeyin.
Projenizin dışarıda, tema ile donatılmış bir ön yüz çıkışına ihtiyacı var mı?
- Evet → CMS. Filament’in böyle bir kavramı yok.
- Hayır, ön yüz ayrı bir Next.js / Astro / SvelteKit uygulaması ve bir API tüketiyor → her iki araç da çalışabilir, ama Filament hala içerik modelini sunmuyor.
Günlük olarak editörler siteyi düzenliyor mu?
- Evet → CMS. Editörlerin yaptığı türdeki değişiklikler (bölümleri yeniden düzenlemek, menüleri değiştirmek, yönlendirmeleri eklemek, SEO’yu düzenlemek) Filament’te yok, ancak bunu kendin inşa etmeniz gerekiyor.
- Hayır, sadece geliştiriciler admin’i kullanıyor → Filament bu durumda bile iyi.
Bütün sistem bu. Üç soru. Cevaplar “CMS, CMS, CMS” çıkarsa CMS’e yönelin. Eğer “Filament, ya da, Filament” çıkarsa Filament’e yönelin. Cevaplar karışık çıkıyor ise asıl soru, ekibinizin gerçekten neyi göndermesi gerektiğidir, hangi çerçevenin bu hafta daha havalı olduğu değil.
Geçmişteki Kendime Ne Söylerdim
Geçmişteki Kendime Ne Söylerdim
İki ay önceki halim, dinliyor:
- Filament bir CMS değil. Bunu
PostResourceoluşturduğunda CMS gibi görünmesi, bir göz aldanmasıdır. On dakika boyunca bu ipuçlarını takip edersen, sitemap.xml, robots.txt, JSON-LD şeması, tema sistemi, halka açık ön yüz, slug geçmişi, yorumlar — hiçbiri Filament’te mevcut değildir çünkü bu Filament’in görevi değil. - “Filament’te inşa etmek” üretken hissettiriyor çünkü her bireysel parça küçük. Maliyet, bu küçük parçaların bütünüdür ve bunu birinci haftadan göremezsin.
- Yada neyin geldiğine bir göz at. WordPress, Statamic, Kirby, Ghost, UnfoldCMS, October CMS, Strapi (Node’a açıksanız) — ilk kaynakları oluşturmadan önce bir saat harcayın. O bir saat, sekiz haftanızı kurtarır.
- “Laravel CMS” sorusu, aslında Laravel ile ilgili değil. Bir CMS yazmayı mı yoksa CMS kullanmayı mı istediğin ile ilgilidir. İkisi de iyidir. Ama yanlışlıkla birini yapmayın.
İşte bu. Yazının özeti. Eğer Filament ve bir CMS arasında seçim yapıyorsanız ve veri modeli “gönderi + sayfa + medya + menü + SEO” ise — bu bir CMS biçiminde bir projedir. Çalışmalara uygun aracı seçin.
Açıklama: UnfoldCMS üzerinde çalışıyorum. Bu yazı ayrıca UnfoldCMS blogunda (kanonik üzerinde) yayımlandı. Filament gözlemlerim, kendi pre-UnfoldCMS çalışmalarımın yorumlarıdır, bu bir satıcı karşılaştırma yazısı değil — Filament, onu uygun olduğu işler için hala tavsiye ettiğim bir araçtır. Özelleştirilmiş bir admin gönderiyorsanız, Filament’i kullanın. Bir CMS gönderiyorsanız, CMS kullanın.
Kaynak: Orijinal Makale


