这是编辑的代码
function edit($id){
if(!empty($this->data)) {
if($this->Article->save($this->data)) {
pr($this->Article);
$this->Session->setFlash("Article Saved!");
$this->redirect('/articles/view');
}
}
else
$this->data = $this->Article->findByArticleId($id);
}
和视图
<?php
echo $form->create('Article', array('type' => 'post','action'=>'edit'));
?>
<table>
<tr><td>Edit Article</td></tr>
<tr><td>Title: </td><td><?php echo $form->text('article_title',array('label'=>false,'type'=>'text','size'=>50)); ?></td></tr>
<tr><td>Text: </td><td><?php echo $form->textarea('article_text',array('label'=>false,'class'=>'ckeditor','columns'=>100,'row'=>8,'width'=>100));?></td></tr>
<tr><td>Published: </td><td><?php echo $form->radio('article_published',array('1'=>'Yes','0'=>'No'),array('legend'=>false));?></td></tr>
</table>
<?php echo $form->end('Save'); ?>
问题是它总是添加新记录而不是更新当前记录。我该如何解决?
答案 0 :(得分:10)
插入新记录的原因是CakePHP方法不知道您正在编辑的记录的ID。基本上,当传递给save()
方法的数据不包含记录ID或表中不存在ID时,save()
将插入新记录而不是更新现有记录。
解决此问题的常用方法是在表单中添加echo $form->input('id');
。这将添加一个隐藏字段,其中包含正在编辑的记录的ID到表单。此时启用security component将是一个好主意,因为它可以帮助您防止篡改表单数据。