2

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

你怎么办?谢谢

4

3 回答 3

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()out,它将使用主控制器的当前参数。

于 2013-09-03T15:01:06.453 回答
1

我认为这样做是个坏主意

除了重新调度解决方案之外,您为什么不尝试为您的需要创建一个服务(只是一个具有所需方法的类)并在您的控制器中使用它

或者一个插件,如果你会在你的控制器中经常使用它(或者如果你需要在你的应用程序的任何地方做一个更大规模的工作,或者在你的控制器中注册事件监听器和触发事件)

但是您可以从 controllerLoader 获取您的控制器并调用它的方法(但在我看来,如果您找不到任何替代方法,您将开始意大利面条式编码)

于 2013-09-04T20:50:14.927 回答
-2

将方法声明staticSecondController

class SecondController extends AbstractActionController
{
    public static function method1($param) {
        ...
    }
}

然后从FirstControlleras调用它

SecondController::method1($param);
于 2014-11-06T17:16:23.110 回答