1. Go to this page and download the library: Download joomla-x/event library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
joomla-x / event example snippets
namespace MyApp;
use Joomla\Event\Event;
// Creating an Event called "onSomething".
$event = new Event('onSomething');
// Adding an argument named "foo" with value "bar".
$event->addArgument('foo', 'bar');
// Setting the "foo" argument with a new value.
$event->setArgument('foo', new \stdClass);
// Getting the "foo" argument value.
$foo = $event->getArgument('foo');
$event->stop();
namespace MyApp;
use Joomla\Event\EventInterface;
/**
* A listener listening to content manipulation events.
*/
class ContentListener
{
/**
* Listens to the onBeforeContentSave event.
*/
public function onBeforeContentSave(EventInterface $event)
{
// Do something with the event, you might want to inspect its arguments.
}
/**
* Listens to the onAfterContentSave event.
*/
public function onAfterContentSave(EventInterface $event)
{
}
}
namespace MyApp;
use Joomla\Event\EventInterface;
$listener = function (EventInterface $event) {
// Do something with the event, you might want to inspect its arguments.
};
namespace MyApp;
use Joomla\Event\Dispatcher;
// Creating a dispatcher.
$dispatcher = new Dispatcher;
/**
* Adding the ContentListener to the Dispatcher.
* By default, it will be registered to all events matching it's method names.
* So, it will be registered to the onBeforeContentSave and onAfterContentSave events.
*/
$dispatcher->addListener(new ContentListener);
namespace MyApp;
use Joomla\Event\Dispatcher;
use Joomla\Event\Priority;
// Of course, it shouldn't be empty.
$listener = function (EventInterface $event) {
};
$dispatcher = new Dispatcher;
/**
* Adding a Closure Listener to the Dispatcher.
* You must specify the event name and the priority of the listener.
* Here, we register it for the onContentSave event with a normal Priority.
*/
$dispatcher->addListener(
$listener,
array('onContentSave' => Priority::NORMAL)
);
// Ensure the dispatcher only registers "on*" methods.
$dispatcher->setListenerFilter('^on');
namespace MyApp;
use Joomla\Event\Dispatcher;
use Joomla\Event\Priority;
/**
* Adding the ContentListener to the Dispatcher.
* It will be registered with a high priority for the onBeforeContentSave, and
* an "Above normal" priority for the onAfterContentSave event.
*/
$dispatcher->addListener(
new ContentListener,
array(
'onBeforeContentSave' => Priority::HIGH,
'onAfterContentSave' => Priority::ABOVE_NORMAL
)
);
/**
* Here, it won't be registered to the onAfterContentSave event because
* it is not specified.
*
* If you specify a priority for an Event,
* then you must specify the priority for all Events.
*
* It is good pracctice to do so, it will avoid to register the listener
* to "useless" events and by consequence save a bit of memory.
*/
$dispatcher->addListener(
new ContentListener,
array('onBeforeContentSave' => Priority::NORMAL)
);
namespace MyApp;
use Joomla\Event\Dispatcher;
use Joomla\Event\Event;
// Creating an event with a "foo" argument.
$event = new Event('onBeforeContentSave');
$event->setArgument('foo', 'bar');
// Registering the event to the Dispatcher.
$dispatcher = new Dispatcher;
$dispatcher->addEvent($event);
// Triggering the onAfterSomething Event.
$dispatcher->triggerEvent('onAfterSomething');
namespace MyApp;
use Joomla\Event\Dispatcher;
use Joomla\Event\Event;
// Creating an event called "onAfterSomething" with a "foo" argument.
$event = new Event('onAfterSomething');
$event->setArgument('foo', 'bar');
$dispatcher = new Dispatcher;
// Triggering the onAfterSomething Event.
$dispatcher->triggerEvent($event);
namespace MyApp;
use Joomla\Event\Event;
class ContentListener
{
public function onBeforeContentSave(Event $event)
{
// Stopping the Event propagation.
$event->stop();
}
}
namespace MyApp;
use Joomla\Event\DispatcherAwareInterface;
use Joomla\Event\DispatcherInterface;
use Joomla\Event\Event;
class ContentModel implements DispatcherAwareInterface
{
const ON_BEFORE_SAVE_EVENT = 'onBeforeSaveEvent';
const ON_AFTER_SAVE_EVENT = 'onAfterSaveEvent';
/**
* The underlying dispatcher.
*
* @var DispatcherInterface
*/
protected $dispatcher;
public function save()
{
$this->dispatcher->triggerEvent(self::ON_BEFORE_SAVE_EVENT);
// Perform the saving.
$this->dispatcher->triggerEvent(self::ON_AFTER_SAVE_EVENT);
}
/**
* Set the dispatcher to use.
*
* @param DispatcherInterface $dispatcher The dispatcher to use.
*
* @return DispatcherAwareInterface This method is chainable.
*/
public function setDispatcher(DispatcherInterface $dispatcher)
{
$this->dispatcher = $dispatcher;
}
}
namespace MyApp;
use Joomla\Event\EventImmutable;
// Creating an immutable event called onSomething with an argument "foo" with value "bar"
$event = new EventImmutable('onSomething', array('foo' => 'bar'));
namespace MyApp;
use Joomla\Event\DelegatingDispatcher;
use Joomla\Event\Dispatcher;
$dispatcher = new Dispatcher;
// Here you add you listeners and your events....
// Instanciating a delegating dispatcher.
$delegatingDispatcher = new DelegatingDispatcher($dispatcher);
// Now you inject this dispatcher in your system, and it has only the triggerEvent method.
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.