CodeIgniter向视图传数据时出现Undefined variable报错如何解决
问题根因及解决方案
该报错核心是
timeline.php视图被加载时,控制器没有将$result变量传递到视图层,结合你提供的代码和报错回溯,常见原因和修复方案如下:
- 未加载对应模型
你在控制器displayDiscussion方法中调用$this->discussions->displayDisc()之前,没有加载discussions模型。模型未加载的情况下,调用模型方法会抛出异常,导致$data['result']没有被成功赋值,传递到视图的参数中自然不存在$result变量。
修复代码:
public function displayDiscussion() { // 先加载模型,注意模型文件名大小写要和传入参数匹配 $this->load->model('discussions'); $data['result'] = $this->discussions->displayDisc(); $this->load->view('timeline',$data); }- 未加载对应模型
- 访问路由不匹配
报错回溯显示Home.php第14行调用了view('timeline'),请确认这行代码所属的方法是不是displayDiscussion。如果是Home控制器的index等其他方法中直接加载了timeline视图,且没有传递$result参数,你访问默认路由时就会触发报错。
修复方式:确保你访问的是指向displayDiscussion方法的路由,默认格式为你的域名/home/displayDiscussion;如果需要在首页展示相关内容,把查询赋值逻辑迁移到对应加载timeline视图的方法中即可。
- 访问路由不匹配
- 视图兼容优化
即便参数传递正常,如果数据库中没有匹配的查询结果,$query->result()会返回空数组,遍历不会触发报错,但为了避免极端情况下参数未传递的问题,可以在视图遍历前加判空逻辑:
<table> <tr> <?php if (isset($result) && !empty($result)): ?> <?php foreach ($result as $row) { ?> <td><?php echo $row->title; ?></td> <td><?php echo $row->content; ?></td> <td><?php echo $row->username; ?></td> <td><?php echo $row->dateTime; ?></td> <?php } ?> <?php else: ?> <td colspan="4">暂无讨论内容</td> <?php endif; ?> </tr> </table>- 视图兼容优化
内容的提问来源于stack exchange,提问作者Dimitar Petrov
相关产品推荐
相关产品推荐

