Hizmet Durum Kancaları
Satılan bir hizmetin açılışından silinmesine kadar dokuz kanca: kurulum, durum geçişleri, askı, sonlandırma ve silme.
Genel Bakış
Hizmet iki yerde birden yaşar: bizim veritabanımızda bir satır olarak ve sağlayıcı modülünün ucunda gerçek bir hesap olarak. Buradaki kancaların çoğu birinci tarafı anlatır.
Bu ayrımı bilmek gerekir: durum değiştiğinde bizim kaydımız değişmiştir. Sunucudaki hesabın gerçekten kapanıp kapanmadığı ayrı bir sorudur ve çoğu zaman kuyruğa alınmış bir işin sonucudur.
Referans
Kurulacak hizmeti değiştirme
Hizmet satırı veritabanına yazılmadan önce çalışır.
user_id, product_id, options, status, duedate. Burada yaptığınız değişiklik doğrudan veritabanına gider.Hook::add('filter:service.save_data', 10, function (&$data) {
// Kendi izleme anahtarinizi options icine koyun; kolon eklemeyin.
$data['options']['acme_batch'] = Acme::currentBatch();
});Hizmetin açıldığını öğrenme
Hizmet satırı yazıldıktan sonra çalışır. Sağlayıcıdaki hesap bu noktada henüz açılmamış olabilir.
Hook::add('action:service.created', 10, function ($id, $data) {
// Satir var, sunucudaki hesap henuz olmayabilir: kurulumu beklemeyin.
Crm::opened((int) $id, (int) ($data['user_id'] ?? 0));
});Durum geçişini durdurma
Hizmetin durumu değişmeden önce çalışır; eski ve hedef durumun ikisini de verir.
active, suspended, cancelled, inprocess.Hook::add('gate:service.status_change', 10,
function ($service, $status, $oldStatus) {
// Yalniz iptal edilmis hizmetin yeniden acilmasini denetle.
if ($oldStatus === 'cancelled' && $status === 'active'
&& !Acme::reactivationAllowed($service))
return 'Iptal edilmis hizmet yonetici onayiyla acilir.';
return null;
});Durum geçişini izleme
Durum değiştikten sonra çalışır. Verilen durum, modülün ezmesinden sonraki nihai değerdir.
Hook::add('action:service.status_changed', 10,
function ($serviceId, $status, $oldStatus, $service) {
// Ayni duruma geri donuste tekrar is yapmayin.
if ($status === $oldStatus) return;
Crm::statusMoved($serviceId, $oldStatus, $status);
});Askıya almayı durdurma
Hizmet ya da ek hizmet askıya alınmadan önce çalışır. Durdurmanın bir bedeli vardır: iş iptal sinyaline çevrilir.
service ya da addon. Aynı kanca ikisini de taşır.status, duedate, module, owner_id.Hook::add('gate:service.suspend', 10,
function ($target_type, $target_id, $service, $user_id) {
if ($target_type !== 'service') return null; // eklentiye karisma
// DIKKAT: veto askiyi engeller ama isi IPTAL sinyaline cevirir.
if (Acme::vipAccount($user_id)) return 'VIP hesap: elle inceleyin.';
return null;
});Askıya almayı izleme
Hizmet askıya alındıktan sonra çalışır. Sunucudaki asıl kapatma kuyruğa alınmıştır.
service ya da addon.0 demek kuyruğa hiç atılmadı demektir: modülsüz hizmette sunucu tarafında bir şey olmaz.Hook::add('action:service.suspended', 10,
function ($target_type, $target_id, $user_id, $reason, $module_queue_id) {
// Kuyruk id'si 0 ise sunucuda hicbir sey yapilmadi.
if ($module_queue_id === 0) Ops::note('suspend-no-module', $target_id);
});Sonlandırmayı izleme
Hizmet sonlandırıldıktan sonra çalışır. Bu kanca sunucu tarafı bilgisi verir: hangi modül, hangi sunucu.
hosting ya da server.Hook::add('action:service.terminated', 10,
function ($target_id, $service_type, $module, $server_id, $module_queue_id) {
// Sunucu kapasitesi serbest kaldi: kendi sayacinizi guncelleyin.
Capacity::released((int) $server_id, $service_type);
});Hizmet silmeyi durdurma
Hizmet kaydı silinmeden önce çalışır. Silme, sunucudaki hesabı kapatmakla aynı şey değildir: yalnız bizim kaydımızı kaldırır.
Hook::add('gate:service.delete', 10, function ($service) {
// Etkin hizmeti silmek sunucuda oksuz hesap birakir.
if (($service['status'] ?? '') === 'active')
return 'Etkin hizmet silinemez; once sonlandirin.';
return null;
});Silmeyi izleme
Hizmet kaydı silindikten sonra çalışır.
Hook::add('action:service.deleted', 10, function ($id, $service) {
Acme::forgetService((int) $id, $service['name'] ?? '');
});Tuzaklar
Askıya alma kapısında boş olmayan bir metin döndürmek işi durdurmaz, iptale çevirir. "Bu hizmeti askıya almayın" diye yazılan bir kural, hizmetin büsbütün iptal edilmesine yol açabilir. Bu kapıya dokunmadan önce sonucun ne olacağını bilerek yazın.
Askı ve sonlandırma kancaları size kuyruk kimliği verir. Sıfır demek modül işinin hiç oluşturulmadığı demektir: hizmetin modülü yoktur ya da sunucu bilinmiyordur. Bizim kaydımız değişmiştir ama sunucuda hiçbir şey olmamıştır.
Durum olayı size modülün ezmesinden sonraki değeri verir. Kapıda gördüğünüz hedefle olayda gelen değer farklı olabilir. Bir geçişe tepki veriyorsanız değeri olaydan okuyun, kapıdaki niyetten değil.
Hizmet silme yalnız bizim kaydımızı kaldırır. Sunucudaki hesap yerinde durur ve artık hiçbir yerden görünmez. Sunucu tarafının da kapanması gerekiyorsa önce sonlandırma yapılır, silme ondan sonra gelir.
İlgili Makaleler
- Hizmet Yaşam Döngüsü Kancaları
- Sipariş Akışı Kancaları
- Zamanlanmış Görev Kancaları
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.