技术咨询:获取选中项值及新增300+套餐报‘out of Package’问题
我来帮你解决这两个和套餐配置相关的问题:
问题1:如何将选中项转换为对应值?
最灵活且易于维护的方式是用关联数组做值映射,相比嵌套三元运算符或多个if判断,这种方式在后续新增套餐时改动成本极低。
举个适配你代码的示例:
// 定义选中项(比如表单提交的'a'/'b'/'c')与对应金额的映射关系 $pledgeMapping = [ 'a' => 100, 'b' => 200, 'c' => 300, 'd' => 500 // 后续新增套餐直接加在这里即可 ]; // 获取用户提交的选中项 $selectedOption = $this->input->post('pledge'); // 从映射数组中获取对应金额,若选中项不存在可设置默认值或抛出提示 $pledge = isset($pledgeMapping[$selectedOption]) ? $pledgeMapping[$selectedOption] : 0;
这种方式的优势是逻辑清晰,后续扩展套餐只需要在映射数组里新增键值对,不需要修改核心判断逻辑。
问题2:新增300及以上套餐时提示“out of Package”
从你提供的代码来看,问题出在$pledge的赋值逻辑上:当前代码只处理了两种情况——选中'a'时赋值100,所有其他情况都强制赋值200,完全没有处理300及以上的套餐金额,所以当用户选择这类套餐时,系统找不到对应的合法金额,就会返回错误提示。
结合上面的映射方案,修改后的代码如下:
// 第一步:定义所有允许的套餐选项,包含300及以上的金额 $pledgeMapping = [ 'a' => 100, 'b' => 200, 'c' => 300, 'd' => 400, 'e' => 500 ]; $selectedOption = $this->input->post('pledge'); // 先校验选中项是否在允许的套餐列表内 if (!isset($pledgeMapping[$selectedOption])) { // 触发"out of Package"提示 $this->session->set_flashdata('pledge', [ 'message' => 'out of Package', 'class' => 'error' ]); redirect(base_url('profile/give')); } // 合法的话,获取对应的套餐金额 $pledge = $pledgeMapping[$selectedOption]; // 你的原有业务逻辑 if ($data['user']['accountType'] == 1) { if ($this->profile_model->savePledge($session['session_id'], $pledge)) { $note_message = 'Pledge successfully added'; $this->session->set_flashdata('pledge', [ 'message' => $note_message, 'class' => 'success' ]); redirect(base_url('profile/give')); } else { // 处理保存失败的逻辑(补充完整原有省略的部分) $this->session->set_flashdata('pledge', [ 'message' => 'Failed to add pledge', 'class' => 'error' ]); redirect(base_url('profile/give')); } }
修改后:
- 你可以随时新增任意金额的套餐,只需在
$pledgeMapping里添加新的键值对 - 只有当用户选择了不在映射列表里的非法选项时,才会返回“out of Package”提示,逻辑更严谨
内容的提问来源于stack exchange,提问作者Valorm
相关产品推荐
相关产品推荐

