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

时间:2014-08-24 06:38:47

标签: php zend-framework zend-framework2

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

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

而不是以下方式:

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

2 个答案:

答案 0 :(得分:3)

通过在invokables子项下注册您的控制器,您可以告诉Zend Framework 它可以通过使用new运算符实例化它来调用控制器。这是 最简单的实例化控制器的方法。作为替代方案,您可以注册一个 工厂创建控制器实例,在这种情况下,您将注册您的控制器 在工厂子项下

答案 1 :(得分:3)

来自ZF2 official documentation

  

注意

     
     

我们告知应用程序我们希望在应用程序中拥有的控制器。这是为了防止有人请求 ServiceManager 在尝试破解应用程序时所知道的任何服务。调度程序使用一个特殊的范围容器,该容器只会将专门注册的控制器拉为可调用类或通过工厂。

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

这是可能的选择之一。另一个选项包括使用Factory创建Controller并使用Service Manager。

使用工厂和invokables在ZF2中注册控制器之间的区别是:

  • invokables:它告诉ServiceManager在需要时实例化该课程。

  • 工厂:它与invokables类似,但在需要进行其他配置时应该使用它。