2013-08-16 50 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); 
}