【问题标题】:How to get module name using shardManager in Laminas?如何在 Laminas 中使用 shardManager 获取模块名称?
【发布时间】:2020-06-22 09:08:26
【问题描述】:

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

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方法中获取分派请求的模块名呢? 是否有任何解决方法来获取模块名称?

【问题讨论】:

    标签: php zend-framework3 laminas


    【解决方案1】:

    我不知道这是否有助于在我使用的 Laminas 的侦听器中获取控制器和模块。

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

    $eventManager = $event->getApplication()->getEventManager();
    $eventManager->attach(\Laminas\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch'), -100);
    

    在 onDispatch 方法中:

    public function onDispatch(\Laminas\EventManager\EventInterface $event)
    {
        $routeMatch = $event->getRouteMatch();
        $controller = get_class($event->getTarget());
        list($module) = explode("\\", $controller);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-06
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多