CakePHP保存表单数据,然后通过另一个控制器方法将其传递给视图

时间:2012-10-17 13:03:05

标签: cakephp

我有一个游戏模型,视图和控制器,以及一个创建新游戏记录的新游戏动作。这很好。

然后,我希望在会话中将该表单数据提供给main_game_view.ctp,或者作为传入数组(但不作为URL参数显示)。我不介意它是在会议上完成的,还是传入的,以更高效率为准。

我尝试了各种不同的组合设置,写下,传递另一个,但到目前为止没有任何工作。这是我最近失败后的代码。 GamesController新游戏动作:

public function newgame() {
    if ($this->request->is('post')) {
        $this->Game->create();
        $this->Session->write('Game',$this->request->data);
        if ($this->Game->save($this->request->data)) {
            // Put the id of the game we just created into the session, into the id field of the Game array.

            $this->Session->write('Game.id',$this->Game->getLastInsertID());
            $this->redirect(array('action' => 'main_game_view'));
        } else {
          $this->Session->setFlash('There was a problem creating the game.');
        }
    }
}

将游戏ID写入会话是完美的,我可以在main_game_view中看到(当我读取它时)。但无论我把会话写入请求数据的哪个位置,我都无法在main_game_view中找到它。

同样,如果我尝试将任何内容传递给重定向,我无法在main_game_view操作, main_game_view视图本身中找到它。

目前我的main_game_view操作只是一个空函数,但在尝试通过重定向传递数据后,我找不到任何内容。

这是main_game_view.ctp:

<?php debug($this->viewVars); ?>

<p><?php echo 'Game id: ' . $this->Session->read('Game.id') ?></p>
<p><?php echo 'Game name: ' . $this->Session->read('Game.game_name') ?></p>

Game.id很好,但Game.game_name中没有任何内容(这是模型中的有效字段名称。我传入变量的所有尝试也都失败了,调试行只显示过:array()。

这看起来很简单,遵循CakePHP博客教程并对其进行修改以创建/编辑/删除游戏实例,但显然有些东西还没有沉淀......

1 个答案:

答案 0 :(得分:2)

你在会话中没有Game.game_new密钥,只需写下:$this->Session->write('Game',$this->request->data);显然你必须在main_game_view中做这样的事情:

<?php $game = $this->Session->read('Game'); ?>
<p><?php echo 'Game id: ' . $this->Session->read('Game.id') ?></p>
<p><?php echo 'Game name: ' . $game['Game']['game_name']; ?></p>