【问题标题】:Zend Framework 2.1, output from one controller action to another controllerZend Framework 2.1,从一个控制器动作输出到另一个控制器
【发布时间】:2013-04-11 16:49:04
【问题描述】:

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

我已经搜索了几个小时无济于事。我尝试使用 $this->view->action,我在早期版本的 zf2 中看到过,但也没有用。

任何信息都会有所帮助。

【问题讨论】:

  • 您已尝试渲染局部视图。
  • 给自己写一个 View-Helper 来渲染 LoginPage - 下面的几篇文章就是一个例子。同样的问题。
  • 我刚试过,我得到了这个错误:文件:/home/user/Zend/ServiceManager/ServiceManager.php:456 消息:Zend\ServiceManager\ServiceManager::get 无法获取或创建渲染实例
  • 谢谢,我试试辅助路由

标签: php zend-framework2


【解决方案1】:

取自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() 方法中使用此名称作为控制器名称。

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多