虽然这是我在2.x中的第一个应用程序,但我并不是CakePHP的新手。我正在使用烘焙控制器&查看并且编辑功能出现问题。
对于初学者来说,这就是烘焙过程:
public function edit($id = null) {
$this->User->id = $id;
if (!$this->User->exists()) {
throw new NotFoundException(__('Invalid user'));
}
if ($this->request->is('post') || $this->request->is('put')) {
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
} else {
$this->request->data = $this->User->read(null, $id);
}
}
单独使用时
if (!$this->User->exists()) {
throw new NotFoundException(__('Invalid user'));
}
我被告知我的用户无效,即使我毫无疑问地知道用户确实存在。
如果我将其更改为:
if (!$this->User->exists($id)) {
throw new NotFoundException(__('Invalid user'));
}
出现正确的编辑表单,并填充正确的数据,但保存后,它会尝试INSERT而不是Update。
通常这是因为CakePHP没有可以使用的ID,但表单中有一个隐藏的ID字段,我甚至试图通过在保存之前添加以下内容来强制解决问题。
$this->request->data['User']['id'] = $id;
有什么想法在这里发生了什么?
答案 0 :(得分:0)
public function edit($id = null) {
if (!$this->User->exists($id)) {
throw new NotFoundException(__('Invalid user'));
}
if ($this->request->is('post') || $this->request->is('put')) {
$user_data = $this->User->findById($id);
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'), 'flash');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'), 'flash');
}
} else {
$options = array('conditions' => array('User.' . $this->User->primaryKey => $id));
$this->request->data = $this->User->find('first', $options);
}
}
答案 1 :(得分:0)
我遇到了同样的问题,bake生成的代码,隐藏的id等等。 然后我发现数据库中的字段id没有设置为自动增量。
我只是设置为自动增量并且它可以正常工作