在会话中使用ID来填充CakePHP中的表单字段

时间:2012-06-26 05:15:43

标签: cakephp

我希望我在CakePHP2中创建的表单如果没有发布数据则显示空白,但如果会话密钥Person.id存在,则用模型中的数据填充。这是我的代码:

function about() {
    // Make session key for debug purposes
    $this->Session->write("Person.id",1);
    if($this->request->is('post')) {
        debug("post");
    } else {
        debug("not post");
        // Use the value in the session Person.id to find the 
        // record in the Person model
        $this->params->data = $this->Person->findById($this->Session->read("Person.id"));
    }
}

以上大多数作品。如果我在不发布任何数据的情况下访问视图,则表单将按照预期填充Person模型中的数据。

但是,如果我发布表单,我仍然会在预期not post时收到调试消息post

如果我注释掉将数据分配给$this->params->data的行,那么提交表单会给我正确的post调试消息,但我不明白为什么会这样。

如果填充$this->params->data意味着蛋糕与表格帖子相同,那么我想如何检查真实的真实表格帖子?

更新:如果我将if($this->request->is('post'))更改为if($this->request->data),那么它的工作方式正是我想要的......但我仍然不明白为什么。

1 个答案:

答案 0 :(得分:1)

在CakePHP2中,当您使用FormHelper在视图中创建表单时,它automatically generates此字段

<input type="hidden" name="_method" value="PUT"/>

编辑记录时(意味着设置了主键)。

当您提交表单时,此隐藏字段会覆盖HTTP方法,您的请求不会被视为POST,而是作为PUT。您可以像这样更新您的测试:

if($this->request->is('put')) {
  ...
}

或反映您在使用bake

时获得的代码
if($this->request->is('post') || $this->request->is('put')) {
  ...
}

如果您想亲眼看到它,只需调试请求:

debug($this->request);

然后有点偏离主题,但如果会话中的键“Person.id”是登录用户,您可能使用自定义机制登录/注销用户,可能值得查看{ {3}}