我通过facebook进行授权和身份验证,如下所示: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html 它的工作原理
现在我想创建自己的事件,当用户使用facebook进行身份验证时,此事件将执行某些操作。例如,将用户重定向到主页。 我是这样做的 http://symfony.com/doc/current/components/event_dispatcher/introduction.html
所以我有这门课 http://pastebin.com/2FTndtL4
我不知道如何实现它,我应该将什么作为参数传递给构造函数
答案 0 :(得分:2)
这很简单。 Symfony 2事件系统功能强大,服务标签可以完成这项工作。
event_dispatcher
; $this->dispatcher->dispatch('facebook.post_auth', new FilterFacebookEvent($args))
点击活动EventSubscriberInterface
的服务,定义静态getSubscribedEvents()
方法。当然你想听facebook.post_auth
事件。 所以你的静态方法看起来像:
static public function getSubscribedEvents()
{
return array(
'facebook.post_auth' => 'onPostAuthentication'
);
}
public function onPostAuthentication(FilterFacebookEvent $event)
{
// Do something, get the event args, etc
}
最后将此服务注册为调度程序的订阅者:给它一个标记(例如facebook.event_subscriber
),然后创建RegisterFacebookEventsSubscribersPass
(参见this tutorial)。编译器传递应检索所有标记的服务,并在循环内调用:
$dispatcher = $container->getDefinition('event_dispatcher');
$subscribers = $container->findTaggedServiceIds('facebook.event_subscriber');
foreach($subscribers as $id => $attributes) {
$definition->addMethodCall('addSubscriber', array(new Reference($id)));
}
通过这种方式,您可以快速创建订阅者(例如,记录日志),只需标记您的服务。
答案 1 :(得分:1)
事件对象只是某种状态/数据存储。它保留的数据可用于通过订阅者和/或监听器调度某种事件。因此,例如,如果您想将facebook id传递给您的Listener(s) - 事件是存储它的正确方法。事件也是调度员的返回值。如果要从监听器/订阅者返回一些数据 - 您还可以将其存储在Event对象中。