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

时间:2015-02-23 12:48:44

标签: php zend-framework2

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

我在考虑不同的选择:

  1. 使用转发插件
  2. 将第二个控制器设置为第一个控制器中的依赖项
  3. 我认为第一个选项可行,但我想知道第二个选项是否有意义。在那种情况下,

    1. 如何获得控制器依赖?
    2. 我试图使用服务管理器来获取它,但它并不存在。 我已经尝试为控制器创建一个Factory,并从Controller Manager获取另一个控制器,当您实现FactoryInterface时,它将作为参数传递给createService方法。但它说没有控制器在那里。 存在与控制器不同的定位器,而不是以与服务定位器相同的方式使用?

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

3 个答案:

答案 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');
相关问题