在另一个控制器zend框架2中调用函数

时间:2013-09-03 09:39:53

标签: zend-framework2

我有两个控制器:firstController和SecondController。 在firstController中,我必须调用secondController的函数,传递参数。

你怎么办? 感谢

3 个答案:

答案 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);