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



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

你怎么能做到?感谢

在控制器上调用操作称为调度。您也可以在控制器中调度一个控制器,称为转发。有一个控制器插件可以转发到另一个控制器。

一个例子:

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

我认为这样做是个坏主意

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

或者一个插件,如果你经常在控制器中使用它(或者如果你需要在更大规模或应用程序中的任何地方进行工作,则在控制器中注册事件列表并触发事件)

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

SecondController 中将方法声明为static

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

然后从FirstController调用它作为

SecondController::method1($param);

最新更新