Zend Framework 2.1,从一个控制器动作输出到另一个控制器

时间:2013-04-11 16:49:04

标签: php zend-framework2

我正在使用zend framework 2.1。我试图从我的索引控制器内的登录控制器加载我的indexAction的输出。我正在尝试完成的最终结果是将我的登录表单加载到索引页面上,就像它是该视图的一部分一样。

我搜索了几个小时但没有用。我试图使用$ this-> view->动作,我在早期版本的zf2中看到过这种动作,但是也没有用。

任何信息都会有所帮助。

1 个答案:

答案 0 :(得分:0)

摘自this blog,深入解释了为什么$ this-> view-> action()已从ZF2中删除,如何使用forward()(ZF2 documentation)控制器插件:

您可以使用forward()控制器插件将所有必要的数据转发到索引控制器操作中的另一个控制器,如下所示:

public function indexAction() {
    $view = new ViewModel();

    $login_param = $this->params('login_param');
    $login = $this->forward()->dispatch('App\Controller\LoginController', array(
        'action' => 'display',
        'login_param' => $login_param
    ));

    $view->addChild($login, 'login');

    return $view;
}

在您看来,您需要做的就是:

<?php echo $this->login; ?>

请注意,forward()插件可能会返回Zend\Http\PhpEnvironment\Response。如果您在登录控制器/操作中使用redirect(),则会发生这种情况。


此外,如果Servicemanager声称找不到App\Controller\LoginController,请查看您的module.config.php。查找名为controllers的部分 例如:

[...]
'controllers' => array(
    'invokables' => array(
        'LoginCon' => 'App\Controller\LoginController',
        'IndexCon' => 'App\Controller\IndexController',
        'DataCon' => 'App\Controller\DataController',
    )
),
[...]

这里有一个名为LoginCon的登录控制器的别名,您应该在dispatch()方法中使用此名称作为控制器名称。