我试图在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
答案 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
}
}