Alan Adı Yetenek Kancaları
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
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.
ad => bool. Dört ekranda da ham adlar; yönetim yanıtı bunları sonradan has_* olarak yeniden adlandırır.service alan adı kaydı, instance servis sağlayıcı ya da null, surface şunlardan biri: website, client_api, admin_panel, admin_api.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
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.
false olarak gelir. Bir nesne atarsanız çağrı ona gider; başka bir değer yok sayılır.service alan adı kaydı, capability istenen yetenek adı, instance servis sağlayıcı ya da null.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.
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
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.