我要问的是,为什么要按以下方式添加控制器:
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
),
而不是以下方式:
'controllers' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
答案 0 :(得分:3)
通过在invokables子项下注册您的控制器,您可以告诉Zend Framework 它可以通过使用new运算符实例化它来调用控制器。这是 最简单的实例化控制器的方法。作为替代方案,您可以注册一个 工厂创建控制器实例,在这种情况下,您将注册您的控制器 在工厂子项下
答案 1 :(得分:3)
注意强>
我们告知应用程序我们希望在应用程序中拥有的控制器。这是为了防止有人请求
ServiceManager
在尝试破解应用程序时所知道的任何服务。调度程序使用一个特殊的范围容器,该容器只会将专门注册的控制器拉为可调用类或通过工厂。
您需要在模块配置中将控制器类添加到invokables
,以便让应用程序了解您添加的控制器。
这是可能的选择之一。另一个选项包括使用Factory创建Controller并使用Service Manager。
使用工厂和invokables在ZF2中注册控制器之间的区别是:
invokables:它告诉ServiceManager
在需要时实例化该课程。
工厂:它与invokables
类似,但在需要进行其他配置时应该使用它。