Zend Framework - Etkinlik Yöneticisi
Tüm modern uygulamalar sağlam ve esnek etkinlik bileşenlerine ihtiyaç duyar. Zend Framework böyle bir bileşen sağlar,zend-eventmanager. Zend-eventmanager, üst düzey mimari tasarlamaya yardımcı olur ve konu / gözlemci modelini ve görünüm odaklı programlamayı destekler.
Etkinlik Yöneticisini Kurun
Olay yöneticisi kullanılarak kurulabilir. Composer aşağıda belirtildiği gibi -
composer require zendframework/zend-eventmanager
Etkinlik Yöneticisinin Kavramları
Etkinlik yöneticisinin temel kavramları aşağıdaki gibidir -
Event - Etkinlik keyfi olarak eylem olarak adlandırılır, diyelim ki greet.
Listener- Herhangi bir PHP geri araması. Olaylara eklenirler ve olay tetiklendiğinde çağrılırlar. Listener'ın varsayılan imzası -
function(EventInterface $e)
EventInterface Class- Olayın kendisini belirtmek için kullanılır. Ad (set / getName), target (get / setTarget) ve parametre (get / setParams) gibi olay bilgilerini ayarlama ve alma yöntemlerine sahiptir.
EventManager class- EventManager örneği, bir uygulamada ve ona karşılık gelen dinleyicilerde tanımlanan tüm olayları izler. EventManager bir yöntem sağlar,attach bir olaya dinleyici eklemek ve bir yöntem sağlar, triggerönceden tanımlanmış herhangi bir olayı tetiklemek için. Tetikleyici çağrıldığında EventManager kendisine bağlı dinleyiciyi çağırır.
EventManagerAwareInterface- Bir sınıfın olay tabanlı programlamayı desteklemesi için EventManagerAwareInterface'i uygulaması gerekir. İki yöntem sağlar,setEventManager ve getEventManager Etkinlik yöneticisini almak ve ayarlamak için.
Misal
Olay yöneticisi konseptini anlamak için basit bir PHP konsol uygulaması yazalım. Aşağıda verilen adımları izleyin.
Bir "olay uygulaması" klasörü oluşturun.
Yüklemek zend-eventmanager besteciyi kullanarak.
Bir PHP dosyası oluşturun Greeter.php "eventapp" klasörünün içinde.
Sınıf oluştur Greeter ve uygulayın EventManagerAwareInterface.
require __DIR__ . '/vendor/autoload.php';
class Greeter implements EventManagerAwareInterface {
// code
}
Buraya, require besteci tarafından yüklenmiş tüm bileşenleri otomatik olarak yüklemek için kullanılır.
Yaz setEventManager sınıftaki yöntem Greeter aşağıda gösterildiği gibi -
public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([ __CLASS__, get_called_class(),]); $this->events = $events; return $this;
}
Bu yöntem, geçerli sınıfı verilen olay yöneticisine ($ olaylar bağımsız değişkeni) ayarlar ve ardından olay yöneticisini yerel değişkende ayarlar $events.
Bir sonraki adım, getEventManager sınıftaki yöntem Greeter aşağıda gösterildiği gibi -
public function getEventManager() {
if (null === $this->events) { $this->setEventManager(new EventManager());
}
return $this->events;
}
Yöntem, olay yöneticisini yerel bir değişkenden alır. mevcut değilse, olay yöneticisinin bir örneğini oluşturur ve onu döndürür.
Bir yöntem yazın, greet, sınıfta Greeter.
public function greet($message) {
printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, $message ]);
}
Bu yöntem, olay yöneticisini alır ve ona bağlı olayları tetikler / tetikler.
Sonraki adım, bir örneğini oluşturmaktır. Greeter sınıfını seçin ve yöntemine bir dinleyici ekleyin, 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);
});
Dinleyici geri çağrısı yalnızca olayın adını, hedefi ve sağlanan parametreleri yazdırır.
Tam listesi Greeter.php aşağıdaki gibidir -
<?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");
Şimdi uygulamayı php komut isteminde çalıştırın. Greeter.php ve sonuç aşağıdaki gibi olacaktır -
"Hello" from class
"Hello" from class
"greet" event of class "Greeter" is called. The parameter supplied is ["Hello"]
Yukarıdaki örnek uygulama, yalnızca bir etkinlik yöneticisinin temellerini açıklamaktadır. Etkinlik yöneticisi, aşağıdakiler gibi çok daha gelişmiş seçenekler sunar:Listener Priority, Custom Callback Prototype / Signature, Short Circuiting, vb. Etkinlik yöneticisi, Zend MVC çerçevesinde yoğun olarak kullanılmaktadır.