如何在zend框架2构造函数中获取操作名称

时间:2013-10-11 10:15:20

标签: php zend-framework zend-framework2

如何在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');
  }
}

4 个答案:

答案 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','');