如何在zf2
的__contructor函数中获取操作名称基本上我想检查用户是否已登录,否则将其重定向到登录页面
我在zend框架1中使用了以下代码,在zf2
中寻找类似的代码if (Zend_Auth::getInstance()->hasIdentity()) {
// If the user is logged in, we don't want to show the login form;
if (in_array($this->getRequest()->getActionName(), 'login')) {
$this->_helper->redirector('index', 'index');
}
} else {
if (!in_array($this->getRequest()->getActionName(), 'login')) {
$this->_helper->redirector('login', 'user');
}
}
答案 0 :(得分:3)
获取当前控制器操作:
$matches = $this->getEvent()->getRouteMatch();
$action = $matches->getParam('action','');
答案 1 :(得分:2)
请使用ZfcUser module,安装后很容易整合
https://github.com/ZF-Commons/ZfcUser/wiki/How-to-check-if-the-user-is-logged-in
在controller.php中
return $this->redirect()->toRoute('yourroute', array());
https://github.com/ZF-Commons/ZfcUser/wiki http://framework.zend.com/manual/2.2/en/modules/zend.mvc.plugins.html
答案 2 :(得分:2)
除了已有的答案:
__construct()
对于这类事情来说是一个非常糟糕的地方。这主要是因为在ZF2中的许多类中,构造函数不知道它的周围环境。许多信息仅在初始构建后传递给类。
当谈到ACL-Checks和类似的东西时,控制器通常是一个非常糟糕的做事的地方。这个东西应该尽早发生,你可以利用ZF2的EventManager来挂钩某个事件,将你的ACL检查放在里面。
在ServiceManager的帮助下,您将能够访问所请求的控制器和操作以及ACL-Service,您可以选择重定向用户或让他通过。
正如Remi所指出的那样,幸运的是有几个模块可以帮助你完成工作。 ZfcUser
没问题。 ACL很明智,你可能也想查看BjyAuthorize
。
答案 3 :(得分:0)
通过此获取操作名称 $ this-> getEvent() - > getRouteMatch() - > getParam('action','');