【问题标题】:Passing variable from controller to view in CodeIgniter将变量从控制器传递到 CodeIgniter 中的视图
【发布时间】:2012-08-30 22:41:36
【问题描述】:

我是 Codeigniter 和 OOP PHP 的新手。

控制器:

public function index(){
    $this->load->model('main_model');
    $planet = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
    }

如果echo $planet 在控制器中,它会做它应该做的事情。如果我在视图中echo $planet 我得到一个未定义的变量错误。 $planet 不是数组。为什么不将 $planet 变量传递给视图?

我知道这是一个简单而基本的问题,但我很尴尬我无法弄清楚自己做错了什么。

编辑:好的,经过更多的摆弄,我让它工作了。只有当变量格式化为数组时才能从Controller传递给View?

【问题讨论】:

  • 下面的答案都是正确的。 CodeIgniter's user guide 真的很有用。用户指南this page 上的向视图添加动态数据与您的问题相关。
  • 变量可以通过 objectarray 从控制器传递到视图。
  • @user1616244 接受这些答案之一
  • @jleft 那些超链接似乎已经失效了。

标签: php oop codeigniter


【解决方案1】:

您必须将数组传递给视图。 CodeIgniter 会自动为您提供$planet

$data = array('planet' => $planet);
$this->load->view('main_view', $data);

有了这个,你可以在你的视图中使用$planet

例如,如果您执行以下操作:

$data = array('foo' => 'Hello', 'bar' => 'world');
$this->load->view('main_view', $data);

$foo$bar 将在您的视图中可用。数组中的键值对会自动转换为视图中的变量。

【讨论】:

  • 这也是变量需要从Controller传递到Model并从Model传回Controller的方式吗?
  • 不,您可以调用模型函数并将其保存在变量中。就像您已经在代码中所做的那样:$planet = $this->main_model->solar();
  • 非常感谢你们的帮助,伙计们。我知道这是一个非常基本的问题。 OOP PHP 看起来很简单,但是学习和理解 MVC 模型对我来说有点困难。
  • @Mischa 先生这个$data = array('foo' => 'Hello', 'bar' => 'world'); 是如何在视图页面中访问的?
  • @KUMAR,它变成了视图中的变量,所以$foo$bar
【解决方案2】:

试试看:

public function index(){
    $this->load->model('main_model');
    $data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $data);    
}

根据您的意见,您可以访问"$planet"

【讨论】:

    【解决方案3】:

    您可以将 arrayobject 传递给视图。然后,您可以在视图中将数组键作为变量访问。

    控制器

    数组

    public function index()
    {
        $this->load->model('main_model');
        $planet_data['planet'] = $this->main_model->solar();
        $this->load->view('main_view', $planet_data);
    }
    

    对象

    public function index()
    {
        $this->load->model('main_model');
        $planet_data = new stdClass(); //Creates a new empty object
        $planet_data->planet = $this->main_model->solar();
        $this->load->view('main_view', $planet_data);
    }
    

    来自CodeIgniter's user manual(deadlink):注意:如果使用对象,类变量会变成数组元素。

    查看

    无论你如何传递数据,都可以这样显示:

    <?php echo $planet; ?>
    

    如果它是一个数组,那么您需要遍历它。或者一个对象,然后访问它的成员变量。


    根据我的经验,使用数组比使用对象更常见。

    【讨论】:

    【解决方案4】:

    如果模态包含数组响应:

    public function solar() {
       $data['earth'] = 'Earth';
       $data['venus'] = 'Venus';
       return $data;
    }
    

    然后你可以像这样查看数据:

    public function index(){
        $this->load->model('main_model');
        $planet = $this->main_model->solar();
        $this->load->view('main_view', $planet);    
    }
    

    但在视图中,您将可以访问这样的数据:

    echo $earth;
    echo $venus;
    

    如果您不知道想要的响应是否会出现,请使用如下代码:

    public function index(){
        $this->load->model('main_model');
        $planet['planet'] = $this->main_model->solar();
        $this->load->view('main_view', $planet);    
    }
    

    在视图文件中,您可以像这样访问数据:

    print_r($planet);
    

    如果您不知道会看到哪些数据,那么只需在视图中使用以下代码:

    print_r($this->_ci_cached_vars);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2012-02-10
      • 2017-03-27
      相关资源
      最近更新 更多