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