我正在使用 zend 框架 2.1。我正在尝试从我的索引控制器内部的登录控制器加载我的 indexAction 的输出。我试图完成的最终结果是将我的登录表单加载到索引页面上,就好像它是该视图的一部分一样。
我已经搜索了几个小时无济于事。我尝试使用 $this->view->action,我在早期版本的 zf2 中看到过,但也没有成功。
任何信息都有帮助。
我正在使用 zend 框架 2.1。我正在尝试从我的索引控制器内部的登录控制器加载我的 indexAction 的输出。我试图完成的最终结果是将我的登录表单加载到索引页面上,就好像它是该视图的一部分一样。
我已经搜索了几个小时无济于事。我尝试使用 $this->view->action,我在早期版本的 zf2 中看到过,但也没有成功。
任何信息都有帮助。
取自这篇博客,它深入解释了为什么 $this->view->action() 已从 ZF2 中删除,一个如何使用 forward() (ZF2 文档)控制器插件的示例:
您可以使用 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() 插件可能会返回 a 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() 方法中使用此名称作为控制器名称。