2013-08-16 2 views
1

Я работаю над модулем входа в свой текущий проект. Для доступа к странице профиля пользователь должен войти в систему. Для этого я проверяю статус входа в сеанс в конструкторе. если страница, не зарегистрированная пользователем, должна перенаправляться на страницу входа.как указать перенаправление конструктора ZF2?

нижеследующий код пседо.

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()', поскольку они вводятся после построения. Используйте Route-Events и проверьте там содержимое сеанса. См. Модуль [BjyAuthorize] (https://github.com/bjyoungblood/BjyAuthorize) и посмотрите, как все сделано правильно;) – Sam

ответ

3

Вы лучше делать это в случае onDispatch, либо путем присоединения к событию, или положить код в метод onDispatch.

У вас не будет доступа к любому ServiceLocator/ServiceManager в contructor, поскольку они вводятся после создания экземпляра класса.

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); 
}