CodeIgniter中无法通过控制器与模型取数据到视图展示的问题
解决CodeIgniter中控制器-模型-视图的数据传递与展示问题
看起来你的控制器代码没写完,而且大概率是在数据传递、模型查询或者视图渲染这几个环节出了问题。我一步步帮你排查和修正:
第一步:补全并修正控制器代码
你的控制器已经完成了数据获取,但缺少加载视图并传递数据的关键步骤,而且最好先判断数据是否存在,避免因空数组导致报错。修正后的控制器代码如下:
class Leads extends CI_Controller { public function show($id) { // 加载模型 $this->load->model('leads_model'); // 从模型获取指定ID的线索数据 $leads = $this->leads_model->get_leads($id); // 先判断数据是否存在,避免访问不存在的数组键报错 if (empty($leads)) { // 可以跳转到404页面或者自定义提示页 show_404(); return; } // 整理要传递给视图的数据(直接传整个数组更简洁,不用逐个赋值) $data['lead'] = $leads; // 加载视图并传递$data数组 $this->load->view('leads/show', $data); } }
第二步:确保模型leads_model的get_leads方法正确实现
模型里的查询逻辑要保证能返回正确的单条数据数组,示例代码如下:
class Leads_model extends CI_Model { public function get_leads($id) { // 强制转换ID为整数,防止SQL注入风险 $id = (int)$id; // 查询指定ID的记录(假设你的数据库表名为`leads`,主键为`id`) $query = $this->db->get_where('leads', ['id' => $id]); // 返回单条记录的关联数组,无数据则返回空数组 return $query->row_array(); } }
注意:如果你的数据库表名或主键不是leads/id,要对应修改代码中的字段。
第三步:在视图中正确渲染数据
假设你的视图文件是application/views/leads/show.php,可以这样安全地展示数据:
<h1>线索详情</h1> <div class="lead-card"> <p><strong>姓名:</strong> <?php echo htmlspecialchars($lead['name']); ?></p> <p><strong>邮箱:</strong> <?php echo htmlspecialchars($lead['email']); ?></p> <p><strong>联系方式:</strong> <?php echo htmlspecialchars($lead['contact']); ?></p> <p><strong>推荐来源:</strong> <?php echo htmlspecialchars($lead['referral']); ?></p> <p><strong>项目详情:</strong> <?php echo htmlspecialchars($lead['project_detail']); ?></p> <p><strong>备注:</strong> <?php echo htmlspecialchars($lead['note']); ?></p> </div>
用htmlspecialchars()可以防止XSS攻击,让页面更安全。
常见问题排查清单
- 检查模型文件名是否为
leads_model.php(首字母小写,后缀.php),类名是否为Leads_model(首字母大写),CodeIgniter对模型命名有严格规范。 - 确认
application/config/database.php中的数据库配置正确,能正常连接到数据库。 - 开启错误提示方便排查:在
application/config/config.php中设置$config['log_threshold'] = 1;和$config['display_errors'] = TRUE;,生产环境记得关闭。
内容的提问来源于stack exchange,提问作者Himanshu Jain
相关产品推荐
相关产品推荐

