CodeIgniter控制器向视图传数组报错:未定义变量$data
解决CodeIgniter控制器传数据到视图时的"Undefined variable: data"错误
嘿,我来帮你排查这个问题!你遇到的报错是因为对CodeIgniter传递视图数据的机制理解有点偏差,咱们一步步来解决:
问题根源
CodeIgniter在加载视图时,会自动把你传递的$data数组拆分成单独的变量,而不是把整个$data数组直接传给视图。也就是说:
- 你在控制器里定义的
$data['company'],到了视图里直接是$company $data['fyfrom']变成视图里的$fyfrom$data['fyto']变成视图里的$fyto
而你在视图里写的$data[0]->fyfrom,既错误地试图访问不存在的$data变量,又把它当成了对象数组来调用,这自然会报错。
修复方案
方案1:使用CodeIgniter的默认传参方式(推荐)
直接在视图里使用拆分后的单个变量就可以了,修改你的view.php代码:
<?php // 打印单个变量 echo $fyfrom; // 如果要查看所有传递过来的变量,可以用这个 print_r(get_defined_vars()); ?>
方案2:强制传递整个$data数组(不推荐,非常规用法)
如果你确实需要在视图里保留$data这个数组,可以在控制器里把它嵌套一层再传递:
public function dispcp(){ $data = array( 'company' => $this->input->post("company"), 'fyfrom' => $this->input->post("fyfrom"), 'fyto' => $this->input->post("fyto"), ); // 把$data作为另一个数组的元素传递 $this->load->view('view', array('data' => $data)); }
然后在视图里用数组下标访问:
<?php echo $data['fyfrom']; ?>
注意:这里不能用$data[0]->fyfrom,因为你传递的是关联数组,不是对象集合,所以要用数组键名而不是对象属性。
另外,你可以在控制器里先打印$data确认表单参数是否正确获取:
public function dispcp(){ $data = array( 'company' => $this->input->post("company"), 'fyfrom' => $this->input->post("fyfrom"), 'fyto' => $this->input->post("fyto"), ); print_r($data); // 先确认数据是否正确获取 $this->load->view('view',$data); }
内容的提问来源于stack exchange,提问作者S. Shaker
相关产品推荐
相关产品推荐

