php 如何在 symfony2 中创建自定义事件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11661057/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 01:49:21  来源:igfitidea点击:

How to create custom event in symfony2

phpsymfonyeventsobserver-patternsymfony-components

提问by Mirage

I want to create custom events called user_loggedso that i can attach my listeners to those events.

我想创建调用的自定义事件,user_logged以便我可以将我的侦听器附加到这些事件。

I want to execute few functions whenever user has logged in.

每当用户登录时,我都想执行一些功能。

回答by Lusitanian

Create a class which extends Symfony\Component\EventDispatcher\Event.

创建一个扩展Symfony\Component\EventDispatcher\Event.

Then, use the event dispatcher service to dispatch the event:

然后,使用事件调度器服务来调度事件:

$eventDispatcher = $container->get('event_dispatcher');
$eventDispatcher->dispatch('custom.event.identifier', $event);

You can register your event listener service like so:

您可以像这样注册您的事件侦听器服务:

tags:
    - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent }

回答by V. Kovpak

This answer is little bit extend answer.

这个答案是一点点扩展答案

services.yml

服务.yml

custom.event.home_page_event:
    class: AppBundle\EventSubscriber\HomePageEventSubscriber
    tags:
        - { name: kernel.event_listener, event: custom.event.home_page_event, method: onCustomEvent }

AppBundle/EventSubscriber/HomePageEventSubscriber.php

AppBundle/EventSubscriber/HomePageEventSubscriber.php

namespace AppBundle\EventSubscriber;
class HomePageEventSubscriber
{
    public function onCustomEvent($event)
    {
        var_dump($event->getCode());
    }
}

AppBundle/Event/HomePageEvent.php

AppBundle/Event/HomePageEvent.php

namespace AppBundle\Event;
use Symfony\Component\EventDispatcher\Event;
class HomePageEvent extends Event
{
    private $code;

    public function setCode($code)
    {
        $this->code = $code;
    }

    public function getCode()
    {
        return $this->code;
    }
}

anywhere you wish, for example in home page controller

您希望的任何地方,例如在主页控制器中

    use AppBundle\Event\HomePageEvent;
    // ...
    $eventDispatcher = $this->get('event_dispatcher');
    $event = new HomePageEvent();
    $event->setCode(200);
    $eventDispatcher->dispatch('custom.event.home_page_event', $event);