【问题标题】:Best practice to call another controller action from a controller in ZF2从 ZF2 中的控制器调用另一个控制器操作的最佳实践
【发布时间】:2015-02-23 12:48:44
【问题描述】:

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

我正在考虑不同的选择:

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

我认为第一个选项会起作用,但我想知道第二个选项是否有意义。在这种情况下,

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

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

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

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    带参数转发:

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

    【讨论】:

      【解决方案2】:

      我会说使用the forward plugin 是ZF2 的方式。您提出的这个其他解决方案听起来非常复杂,并且可能会给您带来各种与 dito 错误有关的意想不到的麻烦。

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

      或者有一个合理的论据为什么使用这个forward 插件不是你想要的?

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

      【讨论】:

      • 你说得对,我在另一个项目中测试过它,它可以工作,我可以通过控制器工厂内的 ServiceLocator 获取控制器实例。是否可以使用定位器从控制器访问该控制器?
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        相关资源
        最近更新 更多