定制 contao-community-alliance/event-dispatcher 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

contao-community-alliance/event-dispatcher

Composer 安装命令:

composer require contao-community-alliance/event-dispatcher

包简介

Event dispatcher service for Contao Open Source CMS

README 文档

README

Version Build Status License Downloads

NOTE: This is obsolete in Contao 4 - you should use the event dispatcher from the symfony kernel directly for Contao 4 only extensions. See below for maintaining compatibility with both Contao versions.

Event dispatcher for Contao Open Source CMS

Why an event dispatcher for Contao Open Source CMS, are the hooks not enough? First you need to understand, there is no real difference between hooks and events. The are both notifications from within the system.

But events are more elastic than hooks. They can be hand round, consumed, stopped or bubble upon a hierarchy.

The real big reasons, why an event dispatcher exists for Contao are:

  1. Events are standard paradigm in software design.
  2. Hooking is a paradigm to alter the behavior of a software, is it not designed for notifications.
  3. Hooks are only a special form of events.
  4. The symfony event dispatcher this extension based on is widely used.
  5. The event dispatcher can handle every form of callbacks, like closures or static methods.

Listen on events

The event dispatcher provide two ways to listen on events.

First and mostly used is an event listener. It is designed to listen on a single event.

Second the event subscriber is designed to listen on multiple events.

Event listener per configuration

Since version 1.3 there are two ways to define your listeners per configuration.

/config/event_listeners.php

We recommend to use this method!

The file /config/event_listeners.php must return an array of event names as keys and listeners as values.

<?php
return array(
    // With a closure
    'event-name' => array(
        function($event) {
            // event code
        }
    ),
    
    // With a static callable
    'event-name' => array(
        array('MyEventListener', 'myCallable')
    ),
    
    // With an object callable
    'event-name' => array(
        array(new MyEventListener(), 'myCallable')
    ),
    
    // With a service object
    'event-name' => array(
        array($GLOBALS['container']['my_event_listener'], 'myCallable')
    ),
    
    // You can wrap the listener into an array with a priority
    'event-name' => array(
        array($listener, $priority)
    ),
);

/config/config.php

In your /config/config.php use $GLOBALS['TL_EVENTS'] to register your event handlers.

With a closure:

$GLOBALS['TL_EVENTS']['event-name'][] = function($event) {
    // event code
};

With a static callable:

$GLOBALS['TL_EVENTS']['event-name'][] = array('MyEventListener', 'myCallable');

With an object callable:

$GLOBALS['TL_EVENTS']['event-name'][] = array(new MyEventListener(), 'myCallable');

Handle with priority

To define the priority, you can use an array with the listener as first and the priority as second element.

$GLOBALS['TL_EVENTS']['event-name'][] = array($listener, $priority);

Event listener per code

$container['event-dispatcher']->addListener('event-name', $listener);

Event subscriber per configuration

Since version 1.3 there are two ways to define your listeners per configuration.

/config/event_subscribers.php

We recommend to use this method!

The file /config/event_subscribers.php must return an array of subscribers.

<?php
return array(
    // With a factory
    function($eventDispatcher) {
        return new MyEventSubscriber();
    },
    
    // With an object class name
    'MyEventSubscriber',
    
    // With an object instance
    new MyEventSubscriber(),
    
    // With a service object
    $GLOBALS['container']['my_event_subscriber'],
);

/config/config.php

In your /config/config.php use $GLOBALS['TL_EVENT_SUBSCRIBERS'] to register your subscribers.

With a factory:

$GLOBALS['TL_EVENT_SUBSCRIBERS'][] = function($eventDispatcher) {
    return new MyEventSubscriber();
};

With an object class name:

$GLOBALS['TL_EVENT_SUBSCRIBERS'][] = 'MyEventSubscriber';

With an object instance:

$GLOBALS['TL_EVENT_SUBSCRIBERS'][] = new MyEventSubscriber();

Event subscriber per code

$container['event-dispatcher']->addSubscriber(new MyEventSubscriber());

Compatibility with Contao 3 & 4.

You are encouraged to register your events directly in the symfony event dispatcher in Contao 4 using service configuration files (yaml, xml, ...).

However, for maintaining compatibility, you still need to supply the event_listeners.php and event_subscribers.php files as otherwise the events will not get registered in Contao 3.

To register events only in Contao 3, we suggest to return an empty array if the version compare is equal to 4.

 <?php
 
+ // Contao 4 registers events via symfony configuration.
+ if (version_compare(VERSION, '4.0', '>=')) {
+     return [];
+ }
 
 return [
     'some.event' => ['Some\EventListener', 'someMethod']
 ];

统计信息

  • 总下载量: 121.25k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 2
  • 依赖项目数: 36
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 7
  • Forks: 3
  • 开发语言: PHP

其他信息

  • 授权协议: LGPL-3.0-or-later
  • 更新时间: 2013-10-28

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固