CodeIgniter3 form_dropdown()报错Undefined variable: branch求助
问题解决:Undefined variable: branch 错误修复
核心原因
你在index方法中正确获取了分支数据并传递给视图,但**add方法中没有将分支数据传递给form视图**,导致渲染表单时找不到$branch变量。另外还存在表单字段名与控制器接收字段不匹配的问题。
分步修复
1. 在add方法中传递分支数据
修改控制器的add方法,在加载form视图前获取分支数据并加入$data数组:
public function add() { if (!$_POST) { $input = (object) $this->students->getDefaultValues(); } else { $input = (object) $this->input->post(null, true); } // 替换为学生表单对应的验证规则,当前package相关规则不匹配业务逻辑 $this->form_validation->set_rules('firstname', 'First Name', 'required', [ 'required' => 'First Name can not be empty' ]); // 补充其他学生必填字段的验证规则,比如lastname、phone_number等 if ($this->form_validation->run() == false) { $data['title'] = 'Register a new Student'; $data['page'] = 'students/form'; $data['form_action'] = base_url("students/add"); $data['input'] = $input; // 新增:获取分支数据并传递给视图 $data['branch'] = $this->students->getBranch(); $this->load->view('back/layouts/main', $data); } else { // 原有提交逻辑保持不变 } }
2. 修正表单下拉框的name属性
视图中form_dropdown的name是branch,但控制器接收时用的是branch_id,导致提交后无法获取选中值,修改视图代码:
<div class="form-group"> <label for="branch">Branch</label> <?php $attributes = 'class = "form-control" id = "branch"'; // 将name从'branch'改为'branch_id',匹配控制器接收的字段 echo form_dropdown('branch_id', $branch, set_value('branch_id'), $attributes); ?> </div>
3. 优化模型的getBranch方法(可选)
原模型的数组处理逻辑可以简化,避免手动创建两个数组再合并:
public function getBranch() { $this->db->select('id, name'); $this->db->from('branch'); $query = $this->db->get(); $result = $query->result_array(); // 直接构建键值对数组,默认选项放在最前面 $branch_list = ['-CHOOSE-' => '-CHOOSE-']; foreach ($result as $item) { $branch_list[$item['id']] = $item['name']; } return $branch_list; }
4. 修正表单验证规则(重要)
当前add方法中的验证规则是针对package_name等无关字段的,必须替换为学生表单的必填字段(如firstname、lastname、phone_number),确保表单验证逻辑符合业务需求。
内容的提问来源于stack exchange,提问作者K.Chams
相关产品推荐
相关产品推荐

