我需要在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方法中获取分派请求的模块名称?有没有什么办法可以获得模块名称?
发布于 2021-01-13 23:47:39
我不知道这是否会有帮助,只能在我使用的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);
}我希望这为您指明了正确的方向。
https://stackoverflow.com/questions/62510944
复制相似问题