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

iest 发布于 2019-03-09 php 最后更新 2019-03-09 14:42 3 浏览

我正在使用zend框架2.1。我正尝试从我的索引控制器中的登录控制器加载我的indexAction的输出。我试图完成的最终结果就是让我的登录表单加载到索引页面上,就好像它是该视图的一部分一样。 我已经搜索了几个小时,但无济于事。我试图使用$ this-> view-> action,这是我在早期版本的zf2中看到的,但那也没有奏效。 任何信息都有帮助。

已邀请:

fillum

赞同来自:

摘自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。如果您在登录控制器/操作中使用重定向(),则会发生这种情况。
此外,如果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()方法中使用此名称作为控制器名称。