Класс GenericEvent
Класс GenericEvent - это универсальная реализация события,
которая позволяет передавать через диспетчер событий произвольные
данные. Первым параметром в конструктор передаётся субъект
(subject), а вторым - массив аргументов (arguments).
Субъект обычно представляет собой объект, над которым выполняется
действие, а аргументы хранят дополнительные данные. Класс реализует
интерфейс Event и наследует Event, поэтому его можно
передавать в метод dispatch.
Синтаксис
new GenericEvent(mixed $subject = null, array $arguments = [])
Пример
Давайте создадим событие GenericEvent с субъектом и аргументами
и передадим его в диспетчер:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\GenericEvent;
class ArticleController extends AbstractController
{
public function index(): Response
{
$dispatcher = new EventDispatcher();
$dispatcher->addListener('article.action', function (GenericEvent $event) {
echo $event->getSubject();
});
$subject = 'article';
$arguments = ['id' => 1];
$event = new GenericEvent($subject, $arguments);
$dispatcher->dispatch($event, 'article.action');
return new Response('ok');
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте получим аргумент события по имени через метод
getArgument:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\GenericEvent;
class ArticleController extends AbstractController
{
public function index(): Response
{
$dispatcher = new EventDispatcher();
$dispatcher->addListener('article.action', function (GenericEvent $event) {
echo $event->getArgument('id');
});
$event = new GenericEvent('article', ['id' => 5]);
$dispatcher->dispatch($event, 'article.action');
return new Response('ok');
}
}
?>
Результат выполнения кода:
"5"
Пример
Давайте установим новый аргумент события через метод
setArgument:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\GenericEvent;
class ArticleController extends AbstractController
{
public function index(): Response
{
$dispatcher = new EventDispatcher();
$dispatcher->addListener('article.action', function (GenericEvent $event) {
$event->setArgument('name', 'abcde');
echo $event->getArgument('name');
});
$event = new GenericEvent('article');
$dispatcher->dispatch($event, 'article.action');
return new Response('ok');
}
}
?>
Результат выполнения кода:
"abcde"
Смотрите также
-
класс
EventDispatcher,
который управляет событиями и их слушателями -
метод
dispatch,
который запускает событие и вызывает слушателей -
метод
getSubject,
который возвращает субъект события -
метод
getArguments,
который возвращает все аргументы события