Zend Framework - Manajer Acara
Semua aplikasi modern membutuhkan komponen acara yang solid dan fleksibel. Zend Framework menyediakan satu komponen seperti itu,zend-eventmanager. Zend-eventmanager membantu merancang arsitektur tingkat tinggi dan mendukung pola subjek / pengamat dan pemrograman berorientasi aspek.
Instal Manajer Acara
Manajer acara dapat diinstal menggunakan Composer seperti yang ditentukan di bawah ini -
composer require zendframework/zend-eventmanager
Konsep Manajer Acara
Konsep inti dari manajer acara adalah sebagai berikut -
Event - Peristiwa disebut tindakan sewenang-wenang, katakanlah greet.
Listener- Semua panggilan balik PHP. Mereka dilampirkan ke acara dan dipanggil saat acara dipicu. Tanda tangan default Pendengar adalah -
function(EventInterface $e)
EventInterface Class- Digunakan untuk menentukan acara itu sendiri. Ini memiliki metode untuk mengatur dan mendapatkan informasi acara seperti nama (set / getName), target (get / setTarget) dan parameter (get / setParams).
EventManager class- Instance EventManager melacak semua kejadian yang ditentukan dalam aplikasi dan pendengarnya yang sesuai. EventManager menyediakan metode,attach untuk melampirkan pemroses ke suatu acara dan menyediakan metode, triggeruntuk memicu peristiwa yang telah ditentukan sebelumnya. Setelah pemicu dipanggil, EventManager memanggil listener yang terpasang padanya.
EventManagerAwareInterface- Agar kelas mendukung pemrograman berbasis peristiwa, ia perlu mengimplementasikan EventManagerAwareInterface. Ini menyediakan dua metode,setEventManager dan getEventManager untuk mendapatkan dan menyetel pengelola acara.
Contoh
Mari kita tulis aplikasi konsol PHP sederhana untuk memahami konsep pengelola acara. Ikuti langkah-langkah yang diberikan di bawah ini.
Buat folder "eventapp".
Install zend-eventmanager menggunakan komposer.
Buat file PHP Greeter.php di dalam folder "eventapp".
Buat kelas Greeter dan menerapkan EventManagerAwareInterface.
require __DIR__ . '/vendor/autoload.php';
class Greeter implements EventManagerAwareInterface {
// code
}
Sini, require digunakan untuk memuat otomatis semua komponen yang diinstal komposer.
Tulis setEventManager metode di kelas Greeter seperti yang ditunjukkan di bawah ini -
public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([ __CLASS__, get_called_class(),]); $this->events = $events; return $this;
}
Metode ini menyetel kelas saat ini ke dalam pengelola acara yang diberikan (argumen $ peristiwa) dan kemudian menyetel pengelola acara di variabel lokal $events.
Langkah selanjutnya adalah menulis file getEventManager metode di kelas Greeter seperti yang ditunjukkan di bawah ini -
public function getEventManager() {
if (null === $this->events) { $this->setEventManager(new EventManager());
}
return $this->events;
}
Metode ini mendapatkan pengelola acara dari variabel lokal. jika tidak tersedia, maka itu membuat instance pengelola acara dan mengembalikannya.
Tulis metode, greet, di kelas Greeter.
public function greet($message) {
printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, $message ]);
}
Metode ini membuat pengelola acara dan mengaktifkan / memicu kejadian yang dilampirkan padanya.
Langkah selanjutnya adalah membuat instance dari Greeter kelas dan lampirkan pendengar ke metodenya, greet.
$greeter = new Greeter(); $greeter->getEventManager()->attach('greet', function($e) { $event_name = $e->getName(); $target_name = get_class($e->getTarget()); $params_json = json_encode($e->getParams()); printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n", $event_name,
$target_name, $params_json);
});
Callback pendengar hanya mencetak nama peristiwa, target, dan parameter yang disediakan.
Daftar lengkap dari Greeter.php adalah sebagai berikut -
<?php
require __DIR__ . '/vendor/autoload.php';
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface;
class Greeter implements EventManagerAwareInterface {
protected $events; public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([__CLASS__, get_called_class(), ]); $this->events = $events; return $this;
}
public function getEventManager() {
if (null === $this->events) { $this->setEventManager(new EventManager());
}
return $this->events; } public function greet($message) {
printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, [$message ]);
}
}
$greeter = new Greeter(); $greeter->greet("Hello");
$greeter->getEventManager()->attach('greet', function($e) {
$event_name = $e->getName();
$target_name = get_class($e->getTarget());
$params_json = json_encode($e->getParams());
printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n",
$event_name, $target_name,
$params_json); }); $greeter->greet("Hello");
Sekarang, jalankan aplikasi di prompt perintah php Greeter.php dan hasilnya adalah sebagai berikut -
"Hello" from class
"Hello" from class
"greet" event of class "Greeter" is called. The parameter supplied is ["Hello"]
Aplikasi contoh di atas hanya menjelaskan dasar-dasar pengelola acara. Manajer acara menyediakan lebih banyak opsi lanjutan sepertiListener Priority, Custom Callback Prototype / Signature, Short Circuiting, dll. Manajer acara digunakan secara luas dalam kerangka MVC Zend.