我希望我在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)
,那么它的工作方式正是我想要的......但我仍然不明白为什么。
答案 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}}