Hook Plugin

Hook plugini, çekirdek yapıya müdahale etmeden, uygulamanın istenilen yerinde, geliştirici tarafından yazılan sınıf ve fonksiyonların çalıştırılmasını sağlar.

Plugini Dahil Etmek

Hook plugini, controller içerisinde aşağıdaki şekilde uygulamaya dahil edilir;

$this->load->plugin('hook');

Hook Oluşturma

Hook yapısı ile çalıştırılacak olan sınıf ve fonksiyonlar /app/hooks dizini içerisinde bulunmalı ve dosya isimleri büyük harfle başlamalıdır.

Oluşturulan hook dosyasının çalıştırılabilmesi için, /app/config dizininde bulunan hooks.php içerisinde sisteme tanıtılması gerekir. Bu dosya aşağıdaki yapıya sahip bir adet dizi değişken barındırır.

return [
	'hook_name' => [
		'filename'	=> 'HookFile', // '/app/hooks' dizininde bulunan hook dosyasının ismi.
		'class'		=> 'ClassName', // Hook dosyasında bulunan sınıf ismi. Sınıf yok ise bu satır silinebilir.
		'method'	=> 'MethodName', // Hook dosyasında çalıştırılacak olan fonksiyon ismi.
		'params'	=> ['param1','param2'] // Çalıştırılacak fonksiyona verilecek olan parametreler.
	],
];

Parametre Ekleme

Oluşturulan hook dosyasında bulunan bir fonksiyona parametre eklemek için add_param() methodu kullanılır.

Parametre Veri Tipi
$params Array

Hook içerisinde yer alan fonksiyon birden fazla parametre alıyorsa, bu parametreler add_param() methodu kullanılarak sırasıyla eklenmelidir.

// Örnek 1
$this->hook->add_param(['key1' => 'value1', 'key2' => 'value2']);

// Örnek 2
$params = [
	'key1' => 'value1',
	'key2' => 'value2'
];
$this->hook->add_param($params);

Hook Çalıştırma

Oluşturulan bir hook'un çalıştırılması için run() methodu kullanılır.

Parametre Veri Tipi
$hook_name String
// Örnek kullanım
$this->hook->run('hook_name');

Örnek Kullanım

Hook konusunda basit bir örnek olarak, e-posta gönderimi yapan bir fonksiyon oluşturalım ve çalıştıralım.

  • Önce /app/hooks dizini içerisinde, e-posta gönderimi yapan fonksiyon oluşturulur;
// Sendmail.php
function sendMail($to, $subject, $text) {
	mail($to, $subject, $text);
}
  • Hook dosyasını sisteme tanıtmak için, /app/config dizininde bulunan hooks.php dosyasına aşağıdaki dizi eklenir;
// hooks.php
'sendmail' => [
	'filename' 	=> 'sendmail',
	'method'	=> 'sendMail'
],
  • Mail gönderimi yapılacak olan yerde hook plugini sisteme dahil edilip gerekli parametreler tanımlanır ve çalıştırılır;
// sampleController.php
$this->load->plugin('hook');
$params = [
	'to' 		=> 'test@test.com',
	'subject' 	=> 'Mail konusu',
	'text'		=> 'Mail içeriği'
];
$this->hook->add_param($params);
$this->hook->run('sendmail');