Php zf2为什么要在模块配置中的invokables数组中添加控制器

Php zf2为什么要在模块配置中的invokables数组中添加控制器,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我想问的是,为什么要以以下方式添加控制器: 'controllers' => array( 'invokables' => array( 'Application\Controller\Index' => 'Application\Controller\IndexController' ), ), 而不是以以下方式: 'controllers' => array( 'Application\Controller\I

我想问的是,为什么要以以下方式添加控制器:

'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController'
    ),
),
而不是以以下方式:

    'controllers' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController'
     ),

通过在invokables子项下注册控制器,您可以告诉Zend Framework 它可以通过使用新操作符实例化控制器来调用控制器。这是 实例化控制器的最简单方法。或者,您可以注册 工厂创建控制器实例,在这种情况下,您将注册控制器 在Factorys子键下,从:

注意


我们向应用程序通知我们希望在应用程序中使用的控制器。这是为了防止有人请求ServiceManager知道的任何服务,试图破坏应用程序。dispatcher使用一个特殊的、限定范围的容器,该容器将只拉取作为可调用类或通过工厂专门注册的控制器

您需要将控制器类添加到模块配置中的
invokables
,以让应用程序了解您添加的控制器

这是可能的选择之一。另一个选项包括使用工厂和服务管理器创建控制器

在ZF2中使用工厂和可调用项注册控制器的区别是:

  • invokables:它告诉
    ServiceManager
    在需要时实例化类

  • 工厂:它类似于
    可调用文件
    ,但当您需要一些额外的配置时,应该使用它