# Alan Adı Yetenek Kancaları

https://dev.wisecp.com/tr/alan-adi-yetenek-kancalari

Bir alan adı yeteneğini servis sağlayıcı dışında bir sağlayıcıya devreden iki kanca.

## Genel Bakış

Bir alan adı hizmeti tek bir modüle çözülür: kendi servis sağlayıcısına. Dolayısıyla servis sağlayıcı olmayan bir sağlayıcının kendine ait bir yeri yoktur. DNS sunucusu, yönlendirme servisi, WHOIS gizlilik sağlayıcısı: hiçbiri alan adı tescil edemez, hiçbiri o modül olamaz.

Bu iki kanca o kapıyı açar. Biri **ekranların neyi sunacağına**, diğeri **çağrıyı kimin karşılayacağına** karar verir. Devralmadığınız her yetenek servis sağlayıcıda kalır.

Yetenek adları ortaktır: `nameservers`, `child_ns`, `transfer_lock`, `auth_code`, `dns_records`, `dns_edit`, `dnssec`, `email_forwarding`, `domain_forwarding`, `whois`, `whois_privacy`.

**İkisini birlikte kullanın.** Yalnız matris, arkasında hiçbir şey olmayan bir sekme verir. Yalnız sağlayıcı, kimsenin ulaşamadığı bir yetenek verir.

## Referans

### Bir yeteneği açmak

filterdomain.capabilities

`Hook::runRefs` referansla dört ekrandan

Modül yoklaması bittikten sonra, sekmeler kurulmadan önce çalışır. Bu matrisi dört ekran ayrı ayrı hesaplar ve dördü de kancayı çağırır: müşteri paneli, müşteri API'si, yönetim paneli ve yönetim API'si.

Parametreler 2

$capsarrayrefYetenek matrisi, `ad => bool`. Dört ekranda da ham adlar; yönetim yanıtı bunları sonradan `has_*` olarak yeniden adlandırır.

$contextarrayref`service` alan adı kaydı, `instance` servis sağlayıcı ya da `null`, `surface` şunlardan biri: `website`, `client_api`, `admin_panel`, `admin_api`.

Dönüş 1

voidMatris **referansla** değişir; dönüş okunmaz.

Dinleyici PHP

```php
Hook::add('filter:domain.capabilities', 10, function (&$caps, $context = []) {
    $service = $context['service'] ?? [];
    if (!MyDns::handles((int) ($service['id'] ?? 0))) return;

    $caps['dns_records'] = true;
    $caps['dns_edit']    = true;
});
```

### Çağrıyı karşılamak

filterdomain.capability_provider

`Services::instance_module()` referansla

Bir ekran modül örneğini isterken ve kullanacağı yeteneğin adını bildirirken çalışır. Yetenek adı verilmeyen çağrı bu kancaya hiç gelmez, bu yüzden hizmet yaşam döngüsü etkilenmez.

Parametreler 2

$providerobject|falseref`false` olarak gelir. Bir nesne atarsanız çağrı ona gider; başka bir değer yok sayılır.

$contextarrayref`service` alan adı kaydı, `capability` istenen yetenek adı, `instance` servis sağlayıcı ya da `null`.

Dönüş 1

voidSağlayıcı **referansla** verilir; dönüş okunmaz.

Dinleyici PHP

```php
Hook::add('filter:domain.capability_provider', 10, function (&$provider, $context = []) {
    if (!in_array((string) ($context['capability'] ?? ''), ['dns_records', 'dns_edit'], true)) return;

    $service = $context['service'] ?? [];
    if (!MyDns::handles((int) ($service['id'] ?? 0))) return;

    $provider = new MyDnsProvider($service);
});
```

### Sağlayıcı nasıl görünmeli

Sağlayıcınız servis sağlayıcının taşıyacağı metot adlarını taşır. Bunları gerçek metot olarak tanımlayın.

Sağlayıcı PHP

```php
class MyDnsProvider
{
    public string $error = '';

    public function set_service(int|array $service = []): void {}

    public function get_dns_records(): array|false
    {
        // ... bölgeyi oku
        return $records;
    }

    public function add_dns_record($type, $name, $value, $ttl, $priority): bool
    {
        // ... tek kaydı yaz
        return true;
    }
}
```

## Tuzaklar

**Sihirli `__call()` işe yaramaz.** Her ekran bir şey çağırmadan önce `method_exists()` sorar ve `__call()` ile karşılanan bir metot o kontrolde görünmez. Sağlayıcınız o zaman hiç çağrılmaz ve hiçbir yer hata bildirmez. Her metodu gerçek metot olarak tanımlayın.

**Tek kanca yetmez.** Sağlayıcı olmadan matrisi açarsanız müşteri boş bir sekme açar. Matrisi açmadan sağlayıcı verirseniz sekme hiç görünmez.

**Dört ekran, tek cevap.** Matris her ekranda ayrı hesaplanır. Panelde açılıp API'de atlanan bir yetenek, sekme görünürken ucun isteği reddetmesi olarak okunur.

**Yaşam döngüsü sizin değil.** Yetenek devri yalnız o yeteneği kapsar. Oluşturma, yenileme, transfer ve iptal servis sağlayıcıya gitmeye devam eder; bunu güvenli kılan da budur.

## İlgili Makaleler

- [Alan Adı DNS Kancaları](https://dev.wisecp.com/tr/alan-adi-dns-kancalari)
- [Alan Adı Kişi Kancaları](https://dev.wisecp.com/tr/alan-adi-kisi-kancalari)
- [Kanca Dinleyicisi Yazmak](https://dev.wisecp.com/tr/kanca-dinleyicisi-yazma)
