2013-05-30 62 views
1

在ZF1中,我曾使用ACL插件來檢查用戶是否試圖通過preDispatch方法訪問非授權控制器。ZF1插件相當於ZF2

我需要在ZF2中做類似的事情。我怎麼做?

回答

4

在ZF2鉤子如前/後調度已被替換爲事件。新的MVC使用EventManager來發送MVC事件,如調度。

在你Module.php添加

public function onBootstrap(MvcEvent $e) 
{ 

    $eventManager  = $e->getApplication()->getEventManager(); 
    $eventManager->attach(MvcEvent::EVENT_DISPATCH,function(MvcEvent $event){ 
       //dispach code comes here 
    }); 

} 

Alternativly可使用預構建模塊,用於此目的這也與ZFC-用戶 https://github.com/bjyoungblood/BjyAuthorize

+0

謝謝您的回答整合。但代碼可以簡單地進入這個lambda函數?如果我有其他插件,它的所有代碼都放在onBootstrap方法中?在我看來,ZF1插件更正確的語義,在類中分離等 – rafaame

+0

@rafaame它可以是任何PHP可調用類型http://php.net/manual/en/language.types.callable.php –

+0

@rafaame將調用所有模塊'onBootstrap'。您附加的所有事件被分組到一個優先級隊列中(您可以設置事件優先權)。這樣,您可以確保您的ACL事件將首先被調用,如果該事件發出響應,所有其他事件將被停止,因爲可能發生了新的請求(如重定向到登錄頁面) – Sam