2013-08-16 71 views
1

我正在處理當前項目中的登錄模塊。對於訪問配置文件頁面用戶必須登錄。爲此,我正在檢查登錄狀態對會話在構造函數。如果用戶未登錄頁面應該重定向到登錄頁面。如何指定重定向ZF2構造函數?

以下是psedo代碼。

use Zend\Mvc\Controller\AbstractActionController; 
    use Zend\View\Model\ViewModel; 
    class StatisticsController extends AbstractActionController 
    { 
    // variables ------ 
     public function __construct() 
     { 
      if(!isset($_SESSION['admin_email'])) 
      { 
      $this->redirect()->toUrl('/admin'); 
      } 
     } 
    } 

以上代碼給出以下錯誤消息提前

Redirect plugin requires event compose a response 

感謝

+1

請參見[這個答案](http://stackoverflow.com/questions/18236468/zf2-getservicelocator-not-found#answer-18243035)。簡而言之,ControllerPlugins在'__construct()'處不可用,因爲它們在構建後注入。使用路線事件並檢查會話的東西。查看模塊[BjyAuthorize](https://github.com/bjyoungblood/BjyAuthorize)並查看它是如何正確完成的;) – Sam

回答

3

你最好在onDispatch情況下這樣做,無論是連接到事件,或將代碼置於onDispatch方法。

您將不會訪問構造器中的任何ServiceLocator/ServiceManager,因爲它們是在實例化類後注入的。

SomeBaseController.php

/** 
* Override, check for login etc 
* 
* @param \Zend\Mvc\MvcEvent $e 
*/ 
public function onDispatch(\Zend\Mvc\MvcEvent $e) 
{ 
    if(! /** SOME CONDITION **/) { 
     return $this->redirect()->toRoute('login'); 
    } 

    return parent::onDispatch($e); 
}