控制器中的ZF2路由和重定向功能

时间:2014-12-09 12:40:58

标签: php redirect routing zend-framework2

我面临以下问题,错误看起来像这样;

An error occurred
An error occurred during execution; please try again later.
Additional information:
Zend\Mvc\Exception\DomainException

File: .../vendor/zendframework/zendframework/library/Zend/Mvc/Controller/Plugin/Url.php:63

Message:
Url plugin requires that controller event compose a router; none found

当我尝试从我的控制器重定向时,我从未遇到过这个问题。假设我在我的控制器中实现了以下函数用于重定向,这会产生上述错误;

public function __construct()
    {   
        # Get user identity
        $auth = new AuthenticationService();        
        if ($auth->hasIdentity()) {
        $this->identity = $auth->getIdentity();
        } else {
        $this->redirect()->toRoute('admin/login');
        }
    }

路由确实存在,因为我可以访问site.com/admin/login/ ..登录是管理员的孩子,因此符号必须是好的。我想知道出了什么问题以及如何解决这个问题,甚至在哪里寻找它也是一个很好的起点。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您查看错误,看起来您无法在控制器构造期间使用重定向插件。

Url plugin requires that controller event compose a router; none found

最好将这些代码放在onDispatch函数中。

public function onDispatch(MvcEvent $e)
{
    # Get user identity
    $auth = new AuthenticationService();
    if ($auth->hasIdentity()) {
        $this->identity = $auth->getIdentity();
    } else {
        return $this->redirect()->toRoute('admin/login');
    }
    return parent::onDispatch($e);
}

请记住返回重定向,否则操作仍会执行。