Formlar ve Field API
Field API
Node türlerinin alanları cp_field_definitions ile tanımlanır; FieldableFormBuilder bir Symfony formuna fields alt formunu ekler. Doğrulama, depolama ve sorgu indeksi alan tipine göre otomatiktir.
$this->fieldForms->add($builder, 'portal_news', 'tr');
Şablonda alanları tek tek çizmek için:
{% for child in form.fields|filter(child => child.vars.name not in ['image']) %}{{ form_row(child) }}{% endfor %}
Görsel ve dosya alanları
image / file alanları medya kütüphanesindeki bir varlık kimliğini (asset id) saklar. Form tarafında field-media betiği önizleme, "Medyadan seç" ve "Kaldır" düğmelerini çizer; şablonunuzun importmap listesine ekleyin:
{{ importmap(['app', 'media-picker', 'field-media']) }}
media-picker önce, field-media sonra gelmelidir. Medya modülü yoksa alan düz bir kimlik kutusu olarak kalır.
Çoklu değerli alanlar
cardinality değeri -1 (sınırsız) veya 1'den büyük olan alanlar CollectionType olur; aynı betik "+ Ekle" ve "×" düğmelerini ekler.
Medya seçici
window.CPaliusMediaPicker.open(callback, options)
// tek seçim: callback tek varlık alır
window.CPaliusMediaPicker.open((asset) => { /* asset.id, asset.url, asset.originalName */ });
// çoklu seçim: callback dizi alır
window.CPaliusMediaPicker.open((assets) => assets.forEach(add), { multiple: true });
Mevcut bir varlığın önizlemesi için: GET /admin/media/api/assets/{id}/meta → {id, url, name, mime}.
Kendi formunuz
Basit kayıt ekranları için ResourceFormBuilder yeterlidir ama alanlara sınıf ve açıklama veremez; zengin formlar için modülünüzde kendi form fabrikanızı yazın (alanlar form-control sınıfı alır). Yazı alanları için data-cpeditor CKEditor'ü, belge/Markdown için ilgili modülün editörünü kullanın.