Метод setArgument класса GenericEvent
Метод setArgument класса GenericEvent
устанавливает значение аргумента события по его имени.
Первым параметром передаётся имя аргумента,
вторым - его значение. Если аргумент с таким именем
уже существует, его значение будет перезаписано.
Метод возвращает объект события, что позволяет
выстраивать цепочку вызовов.
Синтаксис
public function setArgument(string $key, mixed $value): static
Пример
Давайте создадим событие и установим ему аргумент 'name':
<?php
use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent();
$event->setArgument('name', 'abcde');
echo $event->getArgument('name');
?>
Результат выполнения кода:
"abcde"
Пример
Давайте передадим начальные аргументы в конструктор,
а затем перезапишем один из них через setArgument:
<?php
use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent(null, ['name' => 'abcde', 'age' => 30]);
$event->setArgument('name', 'hello');
echo $event->getArgument('name');
?>
Результат выполнения кода:
"hello"
Пример
Давайте используем setArgument в слушателе события,
чтобы обогатить событие данными перед вызовом следующего слушателя:
<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
class ArticleSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
'article.created' => 'onArticleCreated',
];
}
public function onArticleCreated(GenericEvent $event): void
{
$event->setArgument('status', 'published');
}
}
?>
Давайте вызовем событие и прочитаем установленный аргумент:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EventDispatcherInterface $dispatcher): Response
{
$event = new GenericEvent();
$dispatcher->dispatch($event, 'article.created');
return new Response($event->getArgument('status'));
}
}
?>
Результат выполнения кода:
"published"
Смотрите также
-
класс
GenericEvent,
который представляет универсальное событие -
метод
getArgument,
который возвращает аргумент события по имени -
метод
hasArgument,
который проверяет наличие аргумента события -
метод
getArguments,
который возвращает все аргументы события