我有两个控制器:firstController和SecondController。 在firstController中,我必须调用secondController的函数,传递参数。
你怎么办? 感谢
答案 0 :(得分:7)
在控制器上调用操作称为调度。您还可以在控制器中调度控制器,称为转发。有一个控制器插件可以转发到另一个控制器。
一个例子:
class FirstController extends AbstractActionController
{
public function fooAction()
{
$result = $this->forward()->dispatch('SecondController', array(
'action' => 'bar',
));
// $result is ViewModel with parameter bar = "baz"
}
}
class SecondController extends AbstractActionController
{
public function barAction()
{
return new ViewModel(array(
'bar' => 'baz',
));
}
}
如果将第二个参数保留为dispatch()
,它将使用主控制器的当前参数。
答案 1 :(得分:1)
我认为这样做是个坏主意
除了重新分配解决方案之外,为什么不尝试根据需要创建服务(只需要一个具有所需方法的类)并在控制器中使用它
或插件,如果您经常在控制器中使用它(或注册事件列表器并在控制器中触发事件,如果您需要在更大规模或应用程序中的任何位置执行)
然而你可以从controllerLoader获取你的控制器并调用它的方法(但在我看来,如果你找不到任何替代方法,你就开始使用意大利面编码了)
答案 2 :(得分:-2)
在static
SecondController
class SecondController extends AbstractActionController
{
public static function method1($param) {
...
}
}
然后将其从FirstController
称为
SecondController::method1($param);