8
我試圖創建自定義事件,但無法使其工作。Symfony2自定義事件調度程序和偵聽器
我做了什麼:
1.I創建的事件識別類
namespace Path\ToBundle;
final class CookieEvents
{
const COOKIE_EVENT = 'cookie.event';
}
2.Created事件
namespace Path\ToBundle\EventListener;
use Path\ToBundle\Event\FilterResponseEvent;
class ResponseListener
{
public function onCookieInit(FilterResponseEvent $event)
{
//some complex logic goes here
echo('test');
}
}
3.created事件偵聽器
namespace Path\ToBundle\Event;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Response;
class FilterResponseEvent extends Event
{
protected $response;
public function __construct(Response $response)
{
$this->response = $response;
}
public function getResponse()
{
return $this->response;
}
}
4.已結婚註冊事件監聽器裏service.yml
kernel.listener.cookie.event:
class: Path\ToBundle\Event\ResponseListener
tags:
- { name: kernel.event_listener, event: cookie.event, method: onCookieInit }
5.Next我嘗試調度控制器的動作裏面事件
//includes before class
use Symfony\Component\EventDispatcher\EventDispatcher;
use Path\ToBundle\Event\FilterResponseEvent;
//inside controller action
//... $response variable is created
$dispatcher = new EventDispatcher();
$event = new FilterResponseEvent($response);
$dispatcher->dispatch(CookieEvents::COOKIE_EVENT, $event);
return $response;
//EOF controller action
我試圖做到的,是要在某些行動能夠火災事件。不幸的是,這是行不通的。 事件概念對我來說是新事物,我對我在這裏做的事情仍然沒有信心,但它是我能夠從例子中得出的結果。也許有人可以告訴我,如果我要朝正確的方向改正我?如果不是的話,一些指導更值得讚賞。
對於調度員您應該使用'$調度= $這個 - > get('event_dispatcher')',因爲您將使用不同的實例。 – qooplmao
這是如何設置自定義事件的絕佳示例 – lopsided