从 ZF2 中的控制器调用另一个控制器操作的最佳实践
Best practice to call another controller action from a controller in ZF2
调用另一个控制器的动作的最佳方式是什么?
我在考虑不同的选择:
- 使用转发插件
- 将第二个控制器设置为第一个控制器的依赖项
我认为第一个选项可行,但我想知道第二个选项是否有意义。在那种情况下,
- 如何获取控制器依赖项?
我尝试使用服务管理器获取它,但它不存在。
我已经尝试为控制器创建一个工厂,并从控制器管理器中获取另一个控制器,当您实现 FactoryInterface 时,它作为参数传递给 createService 方法。但它说那里没有控制器。
是否存在与控制器不同的定位器,可以像服务定位器一样使用?
- 具有依赖作用并将被调用的控制器必须扩展或实现任何特定的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
)
));
调用另一个控制器的动作的最佳方式是什么?
我在考虑不同的选择:
- 使用转发插件
- 将第二个控制器设置为第一个控制器的依赖项
我认为第一个选项可行,但我想知道第二个选项是否有意义。在那种情况下,
- 如何获取控制器依赖项?
我尝试使用服务管理器获取它,但它不存在。 我已经尝试为控制器创建一个工厂,并从控制器管理器中获取另一个控制器,当您实现 FactoryInterface 时,它作为参数传递给 createService 方法。但它说那里没有控制器。 是否存在与控制器不同的定位器,可以像服务定位器一样使用?
- 具有依赖作用并将被调用的控制器必须扩展或实现任何特定的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
)
));