将数据从控制器传递到视图,而无需在URL CI中调用控制器

时间:2016-06-04 08:27:58

标签: php codeigniter

我有一个名为Stats的Controller,它负责获取一些统计数据并在我的应用程序中显示它们。

Stats.php:

<?php

class Stats Extends CI_Controller{

  public function index()
  {
    $this->load->model('Stats_model');
    $return['users'] = $this->Stats_model->get_users();
    $return['photos'] = $this->Stats_model->get_photos();
    $return['members'] = $this->Stats_model->get_members();
    $this->load->view('stats',$return);
  }
}

在我的应用程序中,我的控制器总共有3个视图。主页,关于,联系方式 - Home_controller,About_controller,Contact_controller。

在这3个视图中的任何一个的开头,我都有一个部分,我想放置统计数据。因此,统计数据将显示在我的应用程序的任何页面中。

如何加载视图(统计信息)以从控制器(统计信息)获取数据而不调用它?当主视图调用时,Home控制器调用,NO统计数据。

我不想调用单独的统计信息页面。我想要在我的应用中的任何页面顶部显示统计数据。我怎样才能在CI中实现这一目标?

由于

1 个答案:

答案 0 :(得分:0)

您可以通过在目录MY_Controller中添加./application/core/来自定义CI_Controller,并将Stats控制器中的代码移动到其构造函数中 像:

<?php

class MY_Controller Extends CI_Controller
{

    protected $_stat_view;
    public function __construct()
    {
        $this->load->model('Stats_model');
        $return['users'] = $this->Stats_model->get_users();
        $return['photos'] = $this->Stats_model->get_photos();
        $return['members'] = $this->Stats_model->get_members();
        //specify true to view's third parameter will make it return 
        //view content instead of render and display it on browser 
        $this->_stat_view = $this->load->view('stats',$return, true);
    }
}

然后你的Home,About,Contact控制器需要扩展这个新的MY_Controller

<?php
class Home_Controller extends MY_Controller
{
     public function __construct()
     {
          parent::__construct();
     }

     public function index()
     {
          $data[stats_section] = $this->_stat_view;
          //In home view just echo $stat_section
          $this->load->view('home', $data);
     }
}

仅供参考,您可以修改MY_中的前缀./application/config/config.php,设置您想要配置项目$config['subclass_prefix']的前缀名称。