Genisletme noktalari
title: Genişletme noktaları description: Bir modülün çekirdeğe bağlanabileceği tüm yerlerin tablosu: öznitelikler, arayüzler, etiketler ve YAML dosyaları; hangisinin otomatik, hangisinin elle etiketlendiği.
Çekirdeği değiştirmeden genişletmenin tüm yolları aşağıdadır. Üç mekanizma vardır:
- Öznitelik: bir sınıfa ya da metoda
#[...]eklersiniz; derleme sırasında toplanır. - Arayüz: bir arayüzü uygularsınız. Bazı arayüzler otomatik etiketlenir, bazıları için modülün
services.yamldosyasında_instanceofetiketi vermeniz gerekir. - YAML dosyası: belirli bir adla koyarsınız; çekirdek okur.
Tablodaki "Otomatik" sütunu evet ise yalnızca arayüzü uygulamanız yeter (autoconfigure: true). Hayır ise modülünüzün services.yaml dosyasına şunu ekleyin:
services:
_instanceof:
App\Core\Queue\AsyncJobHandlerInterface:
tags: ['cp.async_job_handler']
Öznitelikler
| Öznitelik | Nereye konur | Ne yapar | Ayrıntı |
|---|---|---|---|
#[CpAdminMenu] |
Denetleyici metodu | Studio/AACP menü öğesi | Menü ve yetkiler |
#[CpSetting] |
Boş taşıyıcı sınıf (tekrarlanabilir) | Ayar tanımı | Ayarlar |
#[CpResource] |
Doctrine varlığı | İş kaydı: yetenek, denetim, kiracı, iş akışı | İçerik modeli |
#[CpField] |
Varlık özelliği | CpResource formunda alan sunumu |
İçerik modeli |
#[CpEntityType] |
Varlık | Alan, sürüm geçmişi gibi platform hizmetlerine açılır | Alan sistemi |
#[CpFieldType] |
Alan türü sınıfı | Yeni alan türü | Alan sistemi |
#[CpHook] |
Servis metodu (tekrarlanabilir) | Hook noktasına bağlanma | Hook, cron, kuyruk |
#[CpCronJob] |
Servis metodu | Zamanlanmış iş | Hook, cron, kuyruk |
#[CpApi] |
Servis metodu | REST ucu (/api/...) |
API ve webhook |
#[Auditable], #[Publishable], #[SoftDeletable], #[NotTrashable] |
Varlık | Denetim kaydı, yayın durumu, yumuşak silme, çöp kutusundan hariç | İçerik modeli |
Arayüzler
Otomatik etiketlenenler
| Arayüz | Ne ekler |
|---|---|
SearchProviderInterface |
Site içi arama grubu |
UpdateHookInterface |
Sürüm yükseltmesinde bir kez çalışan veri işi |
DoctorCheckInterface |
cp:doctor denetimi |
RebuilderInterface |
Parti halinde çalışan "yeniden say" işi; içerik üreten modül için zorunludur (Rebuild) |
MailTemplateProviderInterface |
Düzenlenebilir e-posta şablonları |
AccountProfileExtensionInterface |
Hesap sayfasına bölüm |
SettingVariantProviderInterface |
Bir ayarın seçeneklerini dinamik sağlamak |
WidgetTypeInterface, WidgetAreaProviderInterface, WidgetAreaRendererInterface |
Widget türü, alanı ve çizimi |
StudioDashboardStatsProviderInterface |
Studio panosuna istatistik |
StudioShellBrandingInterface |
Studio markalama |
SystemWidgetProviderInterface |
AACP panosuna sistem parçacığı |
SeoHeadRendererInterface |
Tam <head> SEO çizimi |
MigrationInterface ve ilgili |
Veri göçü (cp:migrate) |
PluginInterface |
Modül içi alt özellik (eklenti) |
_instanceof ile elle etiketlenenler
| Arayüz | Etiket | Ne ekler |
|---|---|---|
AsyncJobHandlerInterface |
cp.async_job_handler |
Arka plan iş işleyicisi |
AdminSearchProviderInterface |
cpalius.admin_search.provider |
Panel canlı aramasına grup |
NotificationChannelInterface |
cpalius.notification.channel |
Bildirim kanalı |
ConfigProviderInterface |
cp.config_provider |
cp:config için yapılandırma belgesi |
TokenValueProviderInterface |
cp.token_value_provider |
[tür:özellik] token türü |
TextFilterInterface |
cp.text_filter |
Metin biçimi süzgeci |
InboxPulseChannelInterface |
cpalius.inbox_pulse_channel |
Gelen kutusu rozeti kaynağı |
CspSourceProviderInterface |
cp.csp_source_provider |
CSP'ye izinli kaynak |
TrashPurgeHandlerInterface |
cp.trash_purge_handler |
Çöp kutusundan kalıcı silmede ek temizlik |
InboundWebhookHandlerInterface |
contributions.yaml → inbound_webhooks |
Gelen webhook ucu |
Etiketsiz bir sınıf yalnızca toplanmaz; hata vermez. "Sağlayıcım çalışmıyor" sorununun ilk kontrolü etikettir. php cp-core/bin/console cp:debug ve debug:container --tag=<etiket> toplananları listeler.
YAML dosyaları
| Dosya | Konum | İçerik |
|---|---|---|
capabilities.yaml |
Resources/config/ |
Modülün yetenekleri |
routes.yaml |
Resources/config/ |
Rota yükleyicileri |
services.yaml |
Resources/config/ |
Servis tanımları ve etiketler |
contributions.yaml |
Resources/config/ |
Çekirdeğe katkılar (içerik türü rotaları, schema.org, ana sayfa modları, Studio kısayolları…) |
importmap.php |
Resources/config/ |
JavaScript giriş noktaları |
*.sql |
Resources/migrations/ |
Şema migration'ları |
messages+intl-icu.<dil>.yaml |
Resources/translations/ |
Arayüz çevirileri |
user.role.*.yaml |
cp-content/config/sync/ |
Rol tanımı (kurulumcu ekleyebilir) |
workflow/*.yaml |
cp-content/config/sync/ |
İş akışı tanımı |
path_pattern.*.yaml |
cp-content/config/sync/ |
Adres kalıbı |
Hooks/<hook_noktası>.php |
Modül kökü | DI'siz dosya hook'u |
Hooks/cron.<ad>.php |
Modül kökü | DI'siz dosya cron işi |
Çekirdeğin kendi YAML'ları (cp-core/config/): capabilities.yaml, text_formats.yaml, tokens.yaml, view_modes.yaml.
Hook noktaları
Çekirdek ve modüllerin sunduğu hook noktalarının listesi ve yazım yolu Hook, cron, kuyruk sayfasındadır. Kısa liste: entity.<tür>.pre_save | post_insert | post_update | pre_delete | post_delete, entity.any.<an>, entity.<tür>.access, workflow.<ad>.transitioned, theme.*, studio.body.end (Studio sayfalarının sonu), page.render.content, blog.render.sidebar.
Hangisini seçmeli?
| İhtiyaç | Yol |
|---|---|
| Her kayıtta bir şey yap | entity.any.post_insert hook'u |
| Sayfaya HTML eklemek | theme.* hook noktası ya da widget |
| Dış sisteme haber ver | Webhook (WebhookEventEmitter) |
| Dışarıdan veri al | #[CpApi] ya da gelen webhook |
| Periyodik iş | #[CpCronJob] |
| Yavaş iş | AsyncJob kuyruğu |
| Aramada çıkmak | SearchProviderInterface |
| Yeni alan türü | #[CpFieldType] |
| Yönetilebilir ayar | #[CpSetting] |
| E-posta metni | MailTemplateProviderInterface |
| Veri düzeltmesi (yükseltmede) | UpdateHookInterface |