Bugüne kadar her içerik modülü kendi alan mantığını yeniden yazıyordu: Pages ACF benzeri bir prototip, Blog kendi ad-hoc alanları. Sonuç olarak mass-assignment koruması (Manifesto Yasa 5.3), XSS temizliği ve düz alan indeksi (Yasa 6.3) her modülde ayrı ve tutarsız uygulanıyordu. Field API bu boşluğu kapatıyor.
Kavramlar
- Bundle — Node::type değeri (post, page, portfolio). Alanlar bundle'a bağlanır.
- Field type — koddur; normalize / validate / index / ayar şemasını tanımlar. 14 çekirdek tip gelir: Text, Textarea, RichText, Boolean, Integer, Decimal, Email, Url, Date, DateTime, Select, EntityReference, Image, File.
- Field definition — hangi bundle'da hangi alan: cp_field_definitions tablosunda, AACP'den runtime düzenlenebilir.
- Widget / Formatter — alanı forma ve güvenli HTML'e çeviren parçalar.
Güvenlik
FieldValueNormalizer yalnızca bir FieldDefinition ile desteklenen anahtarları yazar; ham istek dizileri asla doğrudan Node::data içine merge edilmez. RichText alanları sanitizer'dan geçer, diğer tüm formatter'lar kaçış (escape) yapar. Alan bazında view/edit yetenek kontrolü hem formda hem görüntülemede uygulanır.
Performans
Tip kaydı derleme zamanında yapılır (sıfır runtime maliyet). Alan tanımları bundle başına önbelleğe alınır. Referans alanları ReferenceBatchLoader ile hedef tip başına tek sorguda çözülür — listelerde N+1 yok. queryable işaretlenen alanlar mevcut düz alan indeksine (node_field_index) yazılır ve DB motorundan bağımsız sorgulanır.
Yönetim
/aacp/fields ekranından bundle seçip alan ekler, tip seçicisine göre dinamik ayar alt-formu doldurur, ağırlığa göre sıralarsınız. Yetki: system.fields.manage.
Modüller bu API'yi tüketir — kod modülde kalır, tıpkı #[CpApi] ve Hook sistemini tükettikleri gibi.
Yorumlar (0)
Henüz yorum yok. İlk yorumu sen yaz.
Yorum yaz
Yorumunuz yayınlanmadan önce incelenecektir.