【问题标题】:how to pass data to the view from function that called inside controller如何从控制器内部调用的函数将数据传递给视图
【发布时间】:2014-04-06 22:09:02
【问题描述】:

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

控制器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';
    }
}

当我在vhome.php 视图中执行var_dump(get_defined_vars()); 时 它只显示了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)

如何解决这个问题?

谢谢

【问题讨论】:

    标签: php function codeigniter argument-passing


    【解决方案1】:

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

    此时$data 4-6 仅在more_data() 函数范围内可用,1-4 仅在index() 函数范围内可用。

    【讨论】:

    • 如何让这个more_data()变量全局可用?
    • 你不能让它们全局可用,这就是面向对象编程 (OOP) 的重点。您可以将它们分配给类属性$this->data
    【解决方案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';
        }
    }
    

    希望这会有所帮助:)

    【讨论】:

    • 啊,是的,这行得通。实际上我理解@CarlMarkham 所说的,但我只在more_data() 中使用$this->data,而不是在more_data()index() 中都使用它。我的坏:)
    • 希望我的回答有帮助:)
    • 这是如何被接受为答案的,而这正是我所说的,只是我选择给出解释而不是给出代码。这个答案所做的只是提供代码,并没有解释为什么需要这个代码。
    • 我想我用他说的代码很好地解释了他。另外,我第一次查看问题时没有看到您的评论。
    • hhahaa 我希望我能接受 2 个答案。我对你们俩表示最深切的感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多