Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework2 在另一个控制器zend framework 2中调用函数_Zend Framework2 - Fatal编程技术网

Zend framework2 在另一个控制器zend framework 2中调用函数

Zend framework2 在另一个控制器zend framework 2中调用函数,zend-framework2,Zend Framework2,我有两个控制器:第一个控制器和第二个控制器。 在第一个控制器中,我必须调用第二个控制器的函数,传递参数 你怎么办? 谢谢在控制器上调用操作称为调度。您还可以在控制器中调度控制器,这称为转发。有一个控制器插件可转发到另一个控制器 例如: class FirstController extends AbstractActionController { public function fooAction() { $result = $this->forward()

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

你怎么办?
谢谢

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

例如:

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

我认为这样做不好

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

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


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

SecondController
中将该方法声明为
static

class SecondController extends AbstractActionController
{
    public static function method1($param) {
        ...
    }
}
然后从
FirstController
as调用它

SecondController::method1($param);

你为什么要这么做?考虑使用一个注入到两者中的服务。将代码放入服务将是一个好主意,但是您可以调度其他控制器:如果OP试图完成的任务是呈现不同的视图,则调度是很好的。假设在出现错误时渲染404视图。然而,如果OP只是试图访问一个处理数据的方法,那么插件或服务是更好的方法。控制器应该很少或没有与其他控制器共享的代码。其返回错误如下:Zend\Mvc\Controller\ControllerManager::get无法获取或创建SecondControllery的实例您必须将其定义为控制器。这确实超出了问题的范围,但请检查此处的第二个代码块:。在控制器数组中使用可调用的或工厂创建一个键,这就足够了。