视图中的Codeigniter全局变量

视图中的Codeigniter全局变量,codeigniter,Codeigniter,关于我的问题,我不知道上面的标题是否正确 有没有一种方法可以声明一个变量,我们可以从视图中的任何位置访问它,而无需在控制器的每个函数中重新定义它 例如,在控制器文件Students.php中包含许多处理视图的函数,请查看以下内容: public function __construct() { parent::__construct(); $data['count_student'] = $this->m_data->allStudent(); // count all st

关于我的问题,我不知道上面的标题是否正确

有没有一种方法可以声明一个变量,我们可以从视图中的任何位置访问它,而无需在控制器的每个函数中重新定义它

例如,在控制器文件Students.php中包含许多处理视图的函数,请查看以下内容:

public function __construct() {
  parent::__construct();
  $data['count_student'] = $this->m_data->allStudent(); // count all students
}

public function index() {
  $data['content'] = 'view-students';
  $this->load->view('frontend/header' , $data);
}

public function showDetails() {
      $data['content'] = 'view-detail-students';
      $this->load->view('frontend/header' , $data);
}
我希望我们可以在
查看student.php
查看detail student.php
中访问
$count\u student
,而无需定义
$data['count\u student']=$this->m\u data->allStudent()


有可能的方法吗?

如果在每个控制器函数中使用相同的变量,则必须按如下方式声明它

class Example extends CI_Controller{
protected $data = array();

public function __construct() {
  parent::__construct();
  $this->data['count_student'] = $this->m_data->allStudent();
}

public function index() {
  $this->data['content'] = 'view-students'; //variables are same
  $this->load->view('frontend/header' , $this->data);
}

public function showDetails() {
      $this->data['content'] = 'view-detail-students'; //variables are same
      $this->load->view('frontend/header' , $this->data);
}

}
仅当此控制器中的所有视图都有公共变量时,此选项才适用。 如果使用不同的变量,则使用以下代码

class Example extends CI_Controller{
    protected $count_student= "";

public function __construct() {
  parent::__construct();
  $this->count_student = $this->m_data->allStudent();
}

public function index() {
  $data['content'] = 'view-students'; //Variable is different
  $data['count_student'] = $this->count_students;
  $this->load->view('frontend/header' , $data);
}

public function showDetails() {
      $data['details'] = 'view-detail-students'; // Variable is different
      $data['count_student'] = $this->count_students;
      $this->load->view('frontend/header' , $data);
}

}

我注意到,如果使用
$this->
在控制器中声明变量,则可以访问视图中的变量而无需传递它们。可能是因为它们默认为公共可见性

 public function __construct() {
   parent::__construct();
   // $data['count_student'] = $this->m_data->allStudent(); // count all students
   // 
   $this->count_all_the_students = $this->m_data->allStudents();

 }

 public function index() {
   $data['content'] = 'view-students';
   $this->load->view('frontend/header' , $data);
 }
然后在视图中,您可以使用
$this->count_all__学生
,而无需将其放入$data数组中

 <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

 <?php 
   echo 'I have misled ' . $this->count_all_the_students . ' students with my MVC breaking suggestions.';


在应用程序/core/create MY_Controller.php中

<?php 

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('m_data');
        $this->data['count_student'] = $this->m_data->allStudent();
    }

}
现在你已经扩展了控制器,你应该可以像

<?php echo $count_student;?>


在视图中

仅控制器的第一个字母应为大写,文件名和类名也应为大写。那不是故意的。我只是复制并粘贴了他的代码。不管怎样,我会改正的。这个方法对我来说似乎很复杂,但很有效。谢谢你,你给我展示了处理codeigniter的另一种方法。@KimJongUn很简单,他是个好兄弟。简单的解决方案,我选择这个作为正确的答案。
<?php echo $count_student;?>