Pa, 02/04/2018 - 21:35 By Umit
drupal hook event

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