那么有人可以向我解释一下吗?我正在尝试编写一个编辑操作,但有点不确定为什么以下内容不起作用:
public function edit($id = null) {
if (!$id) {
throw new NotFoundException('NO ID HAS BEEN SUPPLIED');
}
$data = $this->User->findById($id);
if(!$this->request->is('post')) { $this->request->data = $data; }
if($this->request->is('post') || $this->request->is('put')) {
$this->User->id = $id;
$this->User->save($this->request->data);
$this->redirect(array('action'=>'index'));
}
}
我的意思是,虽然它确实使用从 findById($id).. 收集的数据预先填充了表单,但它不会在表单发送后使用新输入更新数据库。
我已经替换了这个:
if(!$this->request->is('post'))
具有以下内容:
if($this->request->is('get'))
突然间,它工作正常。它使用从帖子中收集的新值更新该行。但是,我不明白这里发生了什么。为什么 !$this->request->is('post), 不起作用,而 $this->request->is('get') 起作用?当然,当第一次调用该操作时,它是使用 GET 请求调用的吗?该请求不符合 !$this->request->is('post') 的条件吗?
编辑:
下面是 ctp:app/View/Users/edit.ctp
<?php echo $this->Form->create('User'); ?>
<fieldset>
<legend><?php echo __('edit User'); ?></legend>
<?php
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->input('role');
// echo $this->Form->input('role', array(
// 'options' => array('admin' => 'Admin', 'regular' => 'Regular')
//));//
?>
</fieldset> <?php echo $this->Form->end(__('Submit')); ?>