You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:49:59