首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Laminas中使用shardManager获取模块名称?

如何在Laminas中使用shardManager获取模块名称?
EN

Stack Overflow用户
提问于 2020-06-22 17:08:27
回答 1查看 158关注 0票数 1

我需要在zf3应用程序的Module.php onBootstrap方法中获取已分派请求的模块名称。使用之前的版本(在Zend名称空间下),我可以通过使用共享事件管理器做到这一点,如下所述。

代码语言:javascript
复制
public function onBootstrap(MvcEvent $e)
{
    $app = $e->getApplication();
    $eventManager = $app->getEventManager();
    $sharedEventManager = $eventManager->getSharedManager();
    $sharedEventManager->attach(AbstractActionController::class, MvcEvent::EVENT_DISPATCH, function($e) {
        $controller = $e->getTarget();
        $controllerClass = get_class($controller);
        $moduleName = strtolower(substr($controllerClass, 0, strpos($controllerClass, '\\')));
        
        // rest of code
        // ..................
        // ..................

    }, 100);
}

但对于较新版本的框架(在Laminas命名空间下),它不起作用。它甚至没有监听AbstractActionController::class目标类的MvcEvent::EVENT_DISPATCH。我发现他们已经根据下面的链接删除了SharedEventManager功能。

https://docs.laminas.dev/laminas-eventmanager/migration/removed/#sharedeventmanagerawareinterface

因此,问题是在新版本的框架中,如何在onBootstrap方法中获取分派请求的模块名称?有没有什么办法可以获得模块名称?

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 23:47:39

我不知道这是否会有帮助,只能在我使用的Laminas中获得一个侦听器中的控制器和模块。

在我的module.php引导方法中:

代码语言:javascript
复制
$eventManager = $event->getApplication()->getEventManager();
$eventManager->attach(\Laminas\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch'), -100);

在onDispatch方法中:

代码语言:javascript
复制
public function onDispatch(\Laminas\EventManager\EventInterface $event)
{
    $routeMatch = $event->getRouteMatch();
    $controller = get_class($event->getTarget());
    list($module) = explode("\\", $controller);
}

我希望这为您指明了正确的方向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62510944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档