从 ZF2 中的控制器调用另一个控制器操作的最佳实践

Best practice to call another controller action from a controller in ZF2

调用另一个控制器的动作的最佳方式是什么?

我在考虑不同的选择:

  1. 使用转发插件
  2. 将第二个控制器设置为第一个控制器的依赖项

我认为第一个选项可行,但我想知道第二个选项是否有意义。在那种情况下,

  1. 如何获取控制器依赖项?

我尝试使用服务管理器获取它,但它不存在。 我已经尝试为控制器创建一个工厂,并从控制器管理器中获取另一个控制器,当您实现 FactoryInterface 时,它​​作为参数传递给 createService 方法。但它说那里没有控制器。 是否存在与控制器不同的定位器,可以像服务定位器一样使用?

  1. 具有依赖作用并将被调用的控制器必须扩展或实现任何特定的class或接口?

我会说使用 the forward plugin 是 ZF2 的方法。您提出的这个其他解决方案听起来非常复杂,可能会让您陷入各种意想不到的 dito 错误问题。

$this->forward()->dispatch('foo', array('action' => 'process'));

或者是否有合理的理由说明为什么使用此 forward 插件不是您想要的?

我真的不明白为什么你不能从你的 ControllerManager 得到你的另一个控制器。您确定它已注册并且您使用正确的名称来获取它吗?

我找到了如何在控制器中获取 ControllerManager:

<?php $cm = $this->serviceLocator->get('controllerManager');

带参数转发:

$this->forward()->dispatch('Namespace\Controller', array(
            'action' => 'ActionName',
            'params' => array(
                'id' => $id
            )
        ));