如何在CakePHP中从表单同时向控制器传递id与value值?
如何在CakePHP表单中同时传递id与value到控制器
看起来你现在的问题是想在编辑表单里同时把Answer的id和value提交给控制器,但当前代码里把HTML元素的id属性设为Answer.0.id,这只是给输入框加了个DOM标识,并不会把id值作为表单数据提交。下面是正确的实现方式:
修正视图代码(edit.ctp)
你需要添加一个隐藏字段来传递id值(因为id不需要用户编辑),同时调整输入框的属性,确保value字段正确绑定:
<?php echo $this->Form->create('Answer', array('action' => 'edit', $id)); ?> <!-- 隐藏字段:传递Answer的id,值从之前查询的$data中获取 --> <?php echo $this->Form->hidden('Answer.0.id', array('value' => $data['Answer']['id'])); ?> <!-- 文本输入框:绑定到value字段,保留你的样式设置 --> <?php echo $this->Form->input('Answer.0.value', array( 'class' => 'validate', 'type' => 'text', 'label' => false )); ?> <?php echo $this->Form->end('Edit Answer'); ?>
调整控制器代码
在控制器的edit方法里,你可以从$this->request->data中同时拿到id和value,然后进行更新操作。另外注意你代码里用了$this->Response->findById($id),应该是笔误,应该对应Answer模型:
public function edit($id) { $this->layout = 'request_processing_edit'; // 从Answer模型获取要编辑的数据 $data = $this->Answer->findById($id); if ($this->request->is(array('post', 'put'))) { // 获取提交的id和value $answerData = $this->request->data['Answer'][0]; // 设置要更新的记录id $this->Answer->id = $answerData['id']; // 保存更新 if ($this->Answer->save($answerData)) { $this->Session->setFlash('答案已成功更新!'); return $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash('更新失败,请检查后重试。'); } } else { // 页面加载时,把现有数据填充到表单 $this->request->data = $data; } }
关键说明
- 隐藏字段是传递id的标准方式,因为它不会在页面上显示,但会随表单一起提交。
- 表单创建时指定
action和$id,可以确保表单提交到正确的编辑路由。 - 如果你的Answer模型属于其他关联模型(比如Question),可能需要调整数据结构,但核心逻辑是通过隐藏字段传递主键id。
内容的提问来源于stack exchange,提问作者hello123
相关产品推荐
相关产品推荐

