【问题标题】:SharedEventManger and __NAMESPACE__SharedEventManger 和 __NAMESPACE__
【发布时间】:2013-07-25 08:56:22
【问题描述】:

我正在尝试检查每个路由的用户登录,如此 ZfcUser 问题中所述:https://github.com/ZF-Commons/ZfcUser/issues/187

将事件附加到 MvcEvent::EVENT_ROUTE 事件 - 很简单。

但是,我只想保护我的管理模块而不是应用程序模块。我确定我曾经能够使用 SharedEventManger 将事件附加到特定的命名空间,但这似乎不再起作用 - SharedEventManger 在最近的 ZF2 版本中是否发生了变化?

我的代码:

namespace Admin;

use Zend\ModuleManager\ModuleManager;
use Zend\Mvc\MvcEvent;

class Module
{

    public function init(ModuleManager $moduleManager) {
        $sharedEventManager = $moduleManager->getEventManager()->getSharedManager();
        $sharedEventManager->attach(
            __NAMESPACE__,
            MvcEvent::EVENT_ROUTE,
            array('Admin\Authentication\Enforcer', 'enforceApplication'), 
            -100
        );
    }

    ...

如果我将第一个属性从 _ _ NAMESPACE _ _ 更改为 '*',则触发事件!

如何附加一个“路由”事件,使其仅在特定命名空间内触发? 或者一旦事件被触发,我如何获取触发器的命名空间,这样我就可以添加一个“if Admin”子句。

非常感谢。

皮特

【问题讨论】:

    标签: zend-framework2 zfcuser


    【解决方案1】:

    我已经设法从路由中识别出管理模块:

        /**
         * Is this an Admin event (determined by route)
         * 
         * @param \Zend\Mvc\MvcEvent $e
         * @return boolean
         */
        static public function isAdmin(MvcEvent $e) {
            $match = $e->getRouteMatch();
            $controller = $e->getTarget();
            if (
                !$match instanceof \Zend\Mvc\Router\RouteMatch || 
                0 !== strpos($match->getMatchedRouteName(), 'admin') || 
                (
                    $controller instanceof \Zend\Mvc\Controller\AbstractController &&
                    $controller->getEvent()->getResult()->terminate()
                )
            ) {
                return false;
            }
    
            return true;
        }

    还有比这更好的方法吗?理想情况下使用 SharedEventManger 的第一个参数。

    谢谢, 皮特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2011-02-17
      相关资源
      最近更新 更多