Drupal 8' de Register Event Subscriber Nasıl Kullanılır.

Drupal 8' de Register Event Subscriber Nasıl Kullanılır.

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

Drupal 8.2.x: class EventDispatcher

Drupal 8.2.x: Events