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


zf2 Why to add the controller in the invokables array in the module config

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

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

,而不是以以下方式:

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

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

摘自ZF2官方文档:

注意


我们告诉应用程序我们希望在应用程序中拥有的控制器。这是为了防止有人请求 ServiceManager 知道的任何服务,试图破坏应用程序。调度程序使用一个特殊的、有作用域的容器,它只会拉出专门注册过的控制器,无论是作为可调用的类还是通过工厂。

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

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

在ZF2中使用工厂和可调用对象注册控制器的区别如下:

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

  • factories:它类似于invokables,但它应该在您需要一些额外配置时使用。