我想问的是,为什么要以以下方式添加控制器:
'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
,但它应该在您需要一些额外配置时使用。