2012-11-26 71 views
2

我通過Facebook做出的授權和認證喜歡這裏: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html 和它的作品Symfony2的我自己的事件

現在,我想我自己的事件,這個事件會在用戶進行身份驗證使用Facebook做一些事情。例如 - 將用戶重定向到主頁。 我做了這樣的 http://symfony.com/doc/current/components/event_dispatcher/introduction.html

所以我有這個類 http://pastebin.com/2FTndtL4

我不知道如何實現它,那我應該作爲參數傳遞給構造

回答

1

事件對象只是某種狀態/數據存儲。它保存可用於通過訂閱者和/或偵聽器發送某種事件的數據。因此,例如,如果您想將Facebook ID傳遞給您的聽衆 - 事件是存儲它的正確方式。事件也是調度員的返回值。如果您想從監聽器/訂閱服務器返回一些數據 - 您也可以將其存儲在Event對象中。

+0

構造函數的參數是Facebook用戶令牌嗎? –

+0

它可以是Facebook用戶令牌如果你想在聽衆中使用 – Ziumin

+0

等等是什麼? Facebook的用戶? –

2

這很簡單。 Symfony 2事件系統功能強大,服務標籤可以完成這項工作。

  1. 將調度器注入想要觸發事件的類中。服務ID是event_dispatcher;
  2. 需要時用$this->dispatcher->dispatch('facebook.post_auth', new FilterFacebookEvent($args))來啓動事件;
  3. 提供實施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 
} 

最後註冊該服務作爲調度用戶:給它一個標籤,然後做一個RegisterFacebookEventsSubscribersPass(參見(如facebook.event_subscriber。) 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))); 
} 

這種方式可以快速使用戶(用於記錄,例如)簡單地標記爲您服務。

相關問題