在Module.php中存在或不存在Zend框架2会话

时间:2015-04-21 10:39:23

标签: zend-framework2

我试图在Module.php

中的公共函数onBootstrap(MvcEvent $e)函数中调用该会话
public function onBootstrap(MvcEvent $e)
    {
    if( $user_session->offsetExists('user_email_id')){
       //code here
     } 
    else {

            header("Location: ". $this->serverUrl() . "/register");


        }

}

我怎样才能做到这一点?
我没有在echo $this->serverUrl();函数

中找到OnBootstrap

1 个答案:

答案 0 :(得分:1)

此代码存在许多问题。

  • 您需要创建一个新的会话容器(Zend\Session\Container)来设置/获取会话数据。

  • 您正在尝试手动设置标头,虽然这样可行,但在ZF2中有更好的方法。

  • onBootstrap方法中的重定向可能不是最好的'时间'这样做。

  • 您尝试在Module.php\Zend\View\Helper\ServiceUrl)中使用视图助手进行重定向。只能在视图中调用视图助手 can 。您可以使用它们,但是您需要通过ViewPluginManager获取它,而不是使用$this->

考虑到这些要点,我会考虑在迟到onRoute或早期onDispatch添加事件监听器。

例如:

namespace FooModule;

use Zend\ModuleManager\Feature\BootstrapListenerInterface;
use Zend\EventManager\EventInterface;
use Zend\Session\Container;
use Zend\Mvc\MvcEvent;

class Module implements BootstrapListenerInterface
{
    public function onBootstrap(EventInterface $event)
    {
        $application  = $event->getApplication();
        $eventManager = $application->getEventManager();

        $eventManager->attach(MvcEvent::EVENT_DISPATCH, [$this, 'isLoggedIn'], 100);
    }

    public function isLoggedIn(MvcEvent $event)
    {
        $data = new Container('user');

        if (! isset($data['user_email_id'])) {

            $serviceManager = $event->getApplication()->getServiceManager();
            $controllerPluginManager = $serviceManager->get('ControllerPluginManager');

            // Get the \Zend\Mvc\Controller\Plugin\Redirect
            $redirect = $controllerPluginManager->get('redirect');

            return $redirect->toRoute('some/route/path', ['foo' => 'bar']);
        }
        // use $data here
    }
}