如何从控制内部控制器的函数传递数据到视图

时间:2014-03-05 03:15:45

标签: php function codeigniter argument-passing

我有控制器调用其他函数,但当我将它传递给视图时,函数中的数据没有传递。

controller home.php

class Home extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $data[1] = 'Data1';
        $data[2] = 'Data2';
        $data[3] = 'Data3';

        $this->more_data(); // this calls other function

        $this->load->view('vhome', $data);
    }

    function more_data()
    {
        $data[4] = 'Data4';
        $data[5] = 'Data5';
        $data[6] = 'Data6';
    }
}

当我在var_dump(get_defined_vars());视图中执行vhome.php时 它只显示了data1,data2和data3

array (size=15)
  '_ci_data' => 
    array (size=3)
      '_ci_view' => string 'vhome' (length=5)
      '_ci_vars' => 
        array (size=3)
          1 => string 'Data1' (length=5)
          2 => string 'Data2' (length=5)
          3 => string 'Data3' (length=5)

如何解决这个问题?

感谢

2 个答案:

答案 0 :(得分:2)

这是因为$data位于本地范围内,get_defined_vars仅适用于调用的范围index()

分钟$data 4-6仅在more_data()函数的范围内可用,而1-4仅在index()函数的范围内可用。

答案 1 :(得分:2)

试试这个。创建一个类属性 $data

class Home extends CI_Controller
{
    public $data;

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $this->data[1] = 'Data1';
        $this->data[2] = 'Data2';
        $this->data[3] = 'Data3';

        $this->more_data(); // this calls other function

        $this->load->view('vhome', $this->data);
    }

    function more_data()
    {
        $this->data[4] = 'Data4';
        $this->data[5] = 'Data5';
        $this->data[6] = 'Data6';
    }
}

希望这会有所帮助:)