Zend framework2 zf2中的loadModules.post是函数吗?

Zend framework2 zf2中的loadModules.post是函数吗?,zend-framework2,zend-framework-mvc,zend-framework-modules,Zend Framework2,Zend Framework Mvc,Zend Framework Modules,当我在zf2中跟踪代码时,我找不到应用程序服务注册的位置。 下面是application.php中的代码 public static function init($configuration = array()) { $smConfig = isset($configuration['service_manager']) ? $configuration['service_manager'] : array(); $serviceManager = new ServiceMana

当我在zf2中跟踪代码时,我找不到应用程序服务注册的位置。 下面是application.php中的代码

public static function init($configuration = array())
{
    $smConfig = isset($configuration['service_manager']) ? $configuration['service_manager'] : array();
    $serviceManager = new ServiceManager(new Service\ServiceManagerConfig($smConfig));
    $serviceManager->setService('ApplicationConfig', $configuration);
    $serviceManager->get('ModuleManager')->loadModules();
    return $serviceManager->get('Application')->bootstrap();
}
代码$serviceManager->get'Application'用于获取应用程序服务。但是应用服务在哪里注册

然后我发现应用程序服务与ZF2/library/Zend/MoudleManager/MoudleManager.php中的代码行$this->getEventManager->triggerModuleEvent::EVENT\u LOAD\u MODULES\u POST$this$this->getEvent相关

public function loadModules()
{
    if (true === $this->modulesAreLoaded) {
        return $this;
    }

    $this->getEventManager()->trigger(ModuleEvent::EVENT_LOAD_MODULES, $this, $this->getEvent());

    /**
     * Having a dedicated .post event abstracts the complexity of priorities from the user.
     * Users can attach to the .post event and be sure that important
     * things like config merging are complete without having to worry if
     * they set a low enough priority.
     */
    $this->getEventManager()->trigger(ModuleEvent::EVENT_LOAD_MODULES_POST, $this, $this->getEvent());

    return $this;
}
另一个问题是ModuleEvent::EVENT_LOAD_MODULES_POST,即loadModules.POST。触发器函数的第一个参数是函数名。loadModules.post也是一个函数吗?它是在哪里定义的


提前感谢。

在创建ServiceListener实例时,大多数Zend\ServiceManager\ServiceManager注册的服务都是由ServiceListener工厂Zend\Mvc\service\ServiceListenerFactory配置的

默认配置实际上存储在ServiceListenerFactory::defaultServiceConfig中。 如果您仔细阅读代码,您将看到“应用程序”别名是在那里定义的

对于第二个问题,ModuleEvent::EVENT_LOAD_模块只是用于标识不同模块加载事件的ModuleEvent常量之一


实际上,应用程序在不同阶段触发了四个模块事件。我还没有机会使用这些事件,我认为它们主要由框架本身使用。到目前为止,我只有机会使用Zend\Mvc\MvcEvent相关事件。

大多数Zend\ServiceManager\ServiceManager注册的服务都是由ServiceListener工厂Zend\Mvc\service\ServiceListenerFactory在创建ServiceListener实例时配置的

默认配置实际上存储在ServiceListenerFactory::defaultServiceConfig中。 如果您仔细阅读代码,您将看到“应用程序”别名是在那里定义的

对于第二个问题,ModuleEvent::EVENT_LOAD_模块只是用于标识不同模块加载事件的ModuleEvent常量之一


实际上,应用程序在不同阶段触发了四个模块事件。我还没有机会使用这些事件,我认为它们主要由框架本身使用。到目前为止,我只有机会使用Zend\Mvc\MvcEvent相关事件。

我将首先解决最后一个问题。触发器方法的第一个参数不是函数,它只是一个名称;按照惯例,该名称通常反映触发它的方法,可以选择使用后缀来提供更多上下文,如.pre、.post等

loadModules.post是在加载所有模块后由ModuleManager::loadModules触发的事件。触发事件时,将使用提供的参数触发该事件上的任何侦听器。事件对象本身也将有一个目标,在本例中它将是ModuleManager

关于应用程序服务,您必须了解MVC层的内部结构。
大多数MVC服务是在Zend\MVC\Service\ServiceListenerFactory中定义的。如果查看该类,您将看到它指定应用程序使用Zend\Mvc\Service\ApplicationFactory创建应用程序实例。ServiceListenerFactory作为创建ModuleManager的工厂的一部分进行检索。这有点间接,但关系是由操作顺序和对象之间的关系定义的。

我将首先解决最后一个问题。触发器方法的第一个参数不是函数,它只是一个名称;按照惯例,该名称通常反映触发它的方法,可以选择使用后缀来提供更多上下文,如.pre、.post等

loadModules.post是在加载所有模块后由ModuleManager::loadModules触发的事件。触发事件时,将使用提供的参数触发该事件上的任何侦听器。事件对象本身也将有一个目标,在本例中它将是ModuleManager

关于应用程序服务,您必须了解MVC层的内部结构。 大多数MVC服务是在Zend\MVC\Service\ServiceListenerFactory中定义的。如果查看该类,您将看到它指定应用程序使用Zend\Mvc\Service\ApplicationFactory创建应用程序实例。ServiceListenerFactory作为创建ModuleManager的工厂的一部分进行检索。这有点间接,但关系是由操作顺序和对象之间的关系定义的