CakePHP中通过POST请求获取表格数量列数据转为数组问题咨询
问题排查与修正方案
整理了代码里的4个核心错误,按优先级修正即可:
1. 表单提交路由错误(最核心问题)
你当前的表单创建时没有指定提交地址,默认会提交到当前访问的Carts/index页面,根本不会请求到updateCart方法。同时你的Update Cart按钮参数传参格式错误,CakePHP的Form->button()方法第二个参数是统一的选项数组,你错误拆分了路由和class参数。
修正后的按钮代码:
<?= $this->Form->button(__('Update Cart'), [ 'formaction' => $this->Url->build(['controller' => 'Carts', 'action' => 'updateCart']), 'class' => 'btn btn-success', 'type' => 'submit' ]) ?>
2. 控制器获取提交参数错误
表单中字段命名为quantity[],提交到后端后PHP会自动解析为名为quantity的数组,不需要加[]后缀取值,原有写法拿不到数据。
修正后的控制器代码:
public function updateCart() { if(isset($_SESSION['cart']) && !empty($_SESSION['cart'])){ if ($this->request->is('post')) { // 直接传quantity即可拿到数组 $qty = $this->request->getData('quantity'); // 调试阶段先注释redirect,不然页面跳转看不到debug输出 // $this->redirect(['controller'=>'Carts','action' => 'index']); debug($qty); exit; } }else{ $this->Flash->error(__("You don't have anything in your cart. Add more?")); } $this->redirect(['controller'=>'Carts','action' => 'index']); }
3. 冗余的contenteditable属性
你给数量列的td加了contenteditable='true',但td内部已经是可编辑的number输入框,这个属性不仅没用,还可能导致用户误点击td直接编辑文本绕过输入框的min校验,建议直接删除这个属性:
<td><?php echo $this->Form->number('quantity[]',['min'=>1, 'value'=>$cart_item->quantity]); ?></td>
4. 重复ID问题(非致命但建议修正)
你循环输出的价格和小计span都用了同一个id="price"、id="total",HTML要求id唯一,建议改成class属性避免后续写JS时出现异常。
内容的提问来源于stack exchange,提问作者Tuyen Nguyen
相关产品推荐
相关产品推荐

