Platform Altyapı Kancaları

2 görüntülenme Markdown

İsteğin altındaki sekiz kanca: giden çağrılar, kabul edilen adresler, yönlendirme, şablon değişkenleri, API adresleri ve ürün tipleri.

Genel Bakış

Bu kancalar bir isteğin altında durur: adres çözülmeden, şablon görünmeden, dışarıya çağrı gitmeden önce. Hepsi sıcak yollardır, yani her istekte çalışırlar.

İkisi özellikle dikkat ister. Ön eşleşme kurulumun gerçek sayfalarının önündedir: kanıtsız sahiplenmek onları gölgeler. Şablon değişkenleri ise bağla geçmez; döndürdüğünüz dizi hepsinin yerine geçer.

Referans

Giden isteği değiştirme

filterhttp.request
Utility::HttpRequest bağla geçer

Sistem dışarıya bir istek göndermeden önce çalışır. Her giden çağrı buradan geçer: sunucu modülleri, kayıt kuruluşları, ödeme kuruluşları.

Parametreler 1
$optionsarraybağlaİsteğin ayarları: adresi, yöntemi, gövdesi, başlıkları, zaman aşımı, sertifika denetimi. Zaman aşımını yükseltmek bütün sistemi yavaşlatabilir: bu kanca tek bir çağrıyı değil, hepsini görür.
Dönüş 1
voidDönüş yoksayılır; ayarların üzerine yazarsınız.
Dinleyici
Hook::add('filter:http.request', 10, function (&$options) {
    // Yalniz kendi adresinize dokunun: bu kanca BUTUN giden cagrilari gorur.
    if (!str_contains($options['url'] ?? '', 'api.acme.test')) return;

    $options['headers'][] = 'X-Acme-Tenant: ' . Acme::tenant();
});

Geçerli adresleri genişletme

filterhttp.trusted_hosts
Kernel ekleyin, sıfırlamayın

Gelen isteğin adresi doğrulanırken çalışır. Liste lisansın kilitli olduğu adresle dolu gelir; kendi adresinizi eklersiniz.

Parametreler 2
$hostsarraybağlaKabul edilen adresler. Listeyi sıfırlamayın: kilitli adresi düşürürseniz kurulum kendi adresinden erişilemez olur.
$contextarraybağlaBilgi: isteğin geldiği ham adres ve lisansın kilitli olduğu adres.
Dönüş 1
voidDönüş yoksayılır; listeye ekleme yaparsınız.
Dinleyici
Hook::add('filter:http.trusted_hosts', 10, function (&$hosts, &$context) {
    // Ekleyin, sifirlamayin: kilitli adres listede kalmali.
    $hosts[] = 'panel.acme.test';
});

Kendi adresinizi kaydetme

registerroutes
Router nesne üzerinden

Adres tablosu kurulurken çalışır. Kendi sayfanızı açmanın doğru yolu budur: eşleşme kancalarıyla adres kapmak yerine adresi kaydedersiniz.

Parametreler 1
$routerobjectYönlendirici. Nesne olduğu için metodunu çağırmanız yeterlidir; dönüşle kayıt yapılmaz.
Dönüş 1
voidDönüş yoksayılır. Kayıt, metodu çağırmanın yan etkisiyle olur.
Dinleyici
Hook::add('register:routes', 10, function ($router) {
    // Kayit donusle degil, cagriyla yapilir.
    $router->add('acme-status', 'acme/status', 'AcmeStatusController');
});

Adresi desenlerden önce sahiplenme

filterrouting.prematch
Router desenlerin önünde

Bir adres çözülmeye başlarken, kayıtlı desenlerden önce çalışır. Buradan dönmek, kurulumun gerçek sayfalarının önüne geçmek demektir.

Parametreler 2
$urlstringÇözülmeye çalışılan adres, dil öneki ayrılmış hâliyle.
$routesarrayKayıtlı bütün adres tanımları; incelemek içindir.
Dönüş 1
array|nullEn az denetleyici anahtarı dolu bir dizi döndüren ilk dinleyici kazanır. ? Sahiplenme kanıtlı olmalı: “bu adres benim olabilir” diye dönmek kurulumun gerçek sayfalarını gölgeler. Arkasında kendi kaydınız yoksa null dönün. Kalıcı bir sayfa açmak istiyorsanız doğru yer bu değil, adres kaydıdır.
Dinleyici
Hook::add('filter:routing.prematch', 10, function ($url, $routes) {
    // KANITLI sahiplenin: kendi kaydiniz yoksa null donun.
    if (!Acme::ownsSlug($url)) return null;

    return ['key' => 'acme-page', 'controller' => 'AcmePageController', 'params' => [$url]];
});

Eşleşmeyen adresi karşılama

filterrouting.match
Router desenler tutmayınca

Kayıtlı desenlerin hiçbiri tutmadığında çalışır. Ön eşleşmenin aksine burada sahiplenmek güvenlidir: gerçek bir sayfayı gölgeleme riski yoktur.

Parametreler 2
$urlstringÇözülemeyen adres.
$routesarrayKayıtlı adres tanımları.
Dönüş 1
array|nullDenetleyici anahtarı dolu bir dizi döndüren ilk dinleyici kazanır. Hiçbiri dönmezse adres bulunamadı akışına düşer.
Dinleyici
Hook::add('filter:routing.match', 10, function ($url, $routes) {
    // Buraya dusen adresi hicbir desen tutmadi: sahiplenmek guvenli.
    $page = Acme::findVanity($url);
    if (!$page) return null;

    return ['key' => 'acme-vanity', 'controller' => 'AcmeVanityController', 'params' => [$page]];
});

Şablona geçen değişkenleri değiştirme

filtertemplate.variables
View::render tam diziyi döndürün

Bir şablon görünmeden önce çalışır. Bütün sayfalara ortak bir değer taşımanın yolu budur.

Parametreler 2
$template_pathstringÇizilen şablonun tam yolu; hangi sayfada olduğunuzu buradan ayırt edersiniz.
$dataarrayŞablona geçecek değişkenlerin tamamı.
Dönüş 1
array|null? Bağla geçmez: döndürdüğünüz dizi mevcut değişkenlerin tamamının yerine geçer, birleştirilmez. Gelen diziyi temel almadan kendi diziniz döndürürseniz sayfanın bütün verisi kaybolur ve ekran boş çıkar. Ekleme yapacaksanız gelen diziye ekleyip tamamını döndürün. Birden çok dinleyici döndürürse sonuncusu kazanır.
Dinleyici
Hook::add('filter:template.variables', 10, function ($template_path, $data) {
    // Gelen diziye EKLEYIN ve tamamini dondurun: merge YOK, replace var.
    $data['acme_banner'] = Acme::banner();

    return $data;
});

Kendi API adreslerinizi açma

filterapi.routes
API Kernel üç ayrı tablo

API adres tablosu kurulurken çalışır. Modülünüzün uçlarını çekirdeğe dokunmadan açmanın yolu budur.

Parametreler 2
$routesarraybağlaAdres tablosu. Her satır yöntem, desen, grup, işlem ve erişim ayarlarını taşır. Ekleme, değiştirme ve çıkarma serbesttir.
$audiencestringbağlaHangi tablo: admin, client ya da module. Kanca üçü için ayrı ayrı çalışır: hangi dalda olduğunuza bakmadan ekleme yaparsanız ucunuz üç tabloya da girer.
Dönüş 1
voidDönüş yoksayılır; tablonun üzerine yazarsınız.
Dinleyici
Hook::add('filter:api.routes', 10, function (&$routes, &$audience) {
    // Kanca uc tablo icin ayri calisir: dali kontrol edin.
    if ($audience !== 'admin') return;

    $routes[] = ['GET', 'acme/status', 'Module:Addons/Acme', 'status'];
});

Yeni ürün tipi tanıtma

registerproduct_types
Products tanım döndürür

Ürün tipi listesi kurulurken çalışır. Kendi tipinizi çekirdeğin listesine buradan katarsınız.

Parametreler 0
Parametre almaz.
Dönüş 1
array|nullBir tanım dizisi döndürürsünüz; dönüşler çekirdek listesine eklenir. Her tanım başlık, açıklama ve simge taşır. Boş dönüşler yoksayılır.
Dinleyici
Hook::add('register:product_types', 10, function () {
    return ['acme-vps' => [
        'title'       => 'Acme VPS',
        'description' => 'Acme uzerinde sanal sunucu',
        'icon'        => 'bi bi-hdd-rack fs-5',
    ]];
});

Tuzaklar

Şablon değişkenleri birleşmez, yerine geçer

Bu filtre bağla geçmez. Döndürdüğünüz dizi bütün değişkenlerin yerine geçer. Gelen diziyi temel almadan kendi dizinizi döndürürseniz sayfanın verisi kaybolur ve ekran boş çıkar. Doğrusu: gelene ekleyip tamamını döndürmek.

Ön eşleşmede kanıtsız sahiplenme sayfa gölgeler

Ön eşleşme kayıtlı desenlerin önündedir. “Bu adres benim olabilir” diye dönmek kurulumun gerçek sayfalarını erişilemez yapar. Yalnız arkasında kendi kaydınız olan adreste eşleşin; kalıcı bir sayfa için doğru yer adres kaydıdır.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.