1

如何在 zf2 的 __contructor 函数中获取操作名称

基本上我想检查用户是否登录,否则将他重定向到登录页面

我在zend framework 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

4 回答 4

3

获取当前控制器动作:

  $matches      = $this->getEvent()->getRouteMatch();
  $action          = $matches->getParam('action','');
于 2013-10-11T12:54:58.023 回答
2

请使用ZfcUser 模块,安装后很容易集成

如何检查用户是否已连接

https://github.com/ZF-Commons/ZfcUser/wiki/How-to-check-if-the-user-is-logged-in

重定向

在控制器.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

于 2013-10-11T11:01:56.397 回答
2

除了已经存在的答案:

对于这样的事情,这__construct()是一个非常糟糕的地方。这主要是因为在 ZF2 中的很多类中,构造函数不知道它的环境。许多信息仅在初始构造后才传递到类中。

当涉及到 ACL-Checks 和类似的东西时,控制器通常是一个非常糟糕的地方。这些事情应该尽早发生,您可以使用 ZF2 的 EventManager 挂钩到某个 Event 以将您的 ACL 检查放入其中。

在 ServiceManager 的帮助下,您将能够访问请求的控制器和操作以及 ACL 服务,您可以选择重定向用户或让他通过。

正如 Remi 所指出的,幸运的是,有几个模块可以帮助您完成工作。ZfcUser没关系。ACL Wise 您可能也想检查一下BjyAuthorize

于 2013-10-11T13:20:13.523 回答
1

通过此 $this->getEvent()->getRouteMatch()->getParam('action', '') 获取动作名称;

于 2013-11-21T04:43:05.757 回答