调用另一个控制器的动作的最佳方法是什么?
我在考虑不同的选择:
我认为第一个选项可行,但我想知道第二个选项是否有意义。在那种情况下,
我试图使用服务管理器来获取它,但它并不存在。 我已经尝试为控制器创建一个Factory,并从Controller Manager获取另一个控制器,当您实现FactoryInterface时,它将作为参数传递给createService方法。但它说没有控制器在那里。 存在与控制器不同的定位器,而不是以与服务定位器相同的方式使用?
答案 0 :(得分:5)
使用参数转发:
$this->forward()->dispatch('Namespace\Controller', array(
'action' => 'ActionName',
'params' => array(
'id' => $id
)
));
答案 1 :(得分:3)
我想说使用the forward
plugin是ZF2的方法。你提出的另一个解决方案听起来非常复杂,并且可能会让你遇到各种无法预料的dito错误。
$this->forward()->dispatch('foo', array('action' => 'process'));
或者有一个合理的说法,为什么使用这个forward
插件不是你想要的?
我实际上不明白为什么你不能从你的ControllerManager
获得另一个控制器。您确定它已注册并且您使用正确的名称来获取它吗?
答案 2 :(得分:1)
我找到了如何在控制器中获取ControllerManager:
<?php $cm = $this->serviceLocator->get('controllerManager');