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