Drupal 8'deki olaylar, sistemin farklı bileşenlerinin birbiriyle etkileşim ve iletişim kurmasına olanak tanır. Bir sistem bileşeni olayı uygun bir saatte gönderir; birçok olay Drupal çekirdeği ve Symfony çerçevesi tarafından her istekte gönderilir. Diğer sistem bileşenleri etkinlik abonesi olarak kaydedilebilir; bir olay gönderildiğinde, kayıtlı abone üzerinde her biri tepki vermesine olanak veren bir yöntem ile çağrılır.
Drupal'ın önceki sürümlerinden gelen çengellerin çoğu, Drupal 8'de Olaylar lehine kaldırıldı. Örnek: hook_init() veya hook_boot() şimdi bir olay abonesini kaydederek yapılabilir.
Örnek modül için aşağıdaki yapıyı kullanacağız:
my_event_subscriber/
- my_event_subscriber.info.yml
- my_event_subscriber.services.yml
- src/
- EventSubscriber/
- MyEventSubscriber.php
özel modul için standart my_event_subscriber.info.yml dosyası:
name: Register an Event Subscriber type: module description: 'Example: How to Register an Event Subscriber in Drupal 8' core: 8.x package: Other
Içinde 'event_subscriber' ile etiketlenmiş bir hizmet tanımlayın.
my_event_subscriber.services.yml.
services:
my_event_subscriber:
class: '\Drupal\my_event_subscriber\EventSubscriber\MyEventSubscriber'
tags:
- { name: 'event_subscriber' }
src/EventSubscriber/MyEventSubscriber.php uygulayan bir sınıf içeriyor
\Symfony\Component\EventDispatcher\EventSubscriberInterface
/**
* @file
* Contains \Drupal\my_event_subscriber\EventSubscriber\MyEventSubscriber.
*/
namespace Drupal\my_event_subscriber\EventSubscriber;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Event Subscriber MyEventSubscriber.
*/
class MyEventSubscriber implements EventSubscriberInterface {
/**
* Code that should be triggered on event specified
*/
public function onRespond(FilterResponseEvent $event) {
// The RESPONSE event occurs once a response was created for replying to a request.
// For example you could override or add extra HTTP headers in here
$response = $event->getResponse();
$response->headers->set('X-Custom-Header', 'MyValue');
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
// For this example I am using KernelEvents constants (see below a full list).
$events[KernelEvents::RESPONSE][] = ['onRespond'];
return $events;
}
}
KernelEvents sabitler listesi aşağıdadır:
KernelEvents::CONTROLLER; // The CONTROLLER event occurs once a controller was found for handling a request. KernelEvents::EXCEPTION; // The EXCEPTION event occurs when an uncaught exception appears. KernelEvents::FINISH_REQUEST; //The FINISH_REQUEST event occurs when a response was generated for a request. KernelEvents::REQUEST; // The REQUEST event occurs at the very beginning of request dispatching. KernelEvents::RESPONSE; // The RESPONSE event occurs once a response was created for replying to a request. KernelEvents::TERMINATE; // The TERMINATE event occurs once a response was sent. KernelEvents::VIEW; // The VIEW event occurs when the return value of a controller is not a Response instance.
Daha Fazlası için Drupal sayfası
Bir etkinlik nasıl gönderilir?
$dispatcher = \Drupal::service('event_dispatcher');
$dispatcher->dispatch($Event_Name, $Optional_Event_Object);
Kullanışlı bağlantılar
Drupal 8.2.x: HttpKernel component event constants