You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:14:38