你好找到了基于codeigniter的免费源代码,
我在codeigniter中有一个控制器,有些代码是这样的:
class front extends main
{
function __construct()
{
parent::__construct();
$this->load_main_vars();
}
private function load_main_vars()
{
$vars['title'] = $this->option->get('title');
$vars['keywords'] = $this->option->get('keywords');
$vars['description'] = $this->option->get('description');
$this->db->order_by('category_name', 'ASC');
$this->db->where('category_active', 1);
$vars['categories'] = $this->db->get_where('categories', array('category_state' => 1))->result();
$this->load->vars($vars);
}
}
然后我有另一个扩展前面的控制器(上面的代码):
class Site extends front
{
function __construct()
{
parent::__construct();
}
function index()
{
$vars['site'] = $this;
$this->view('site/index', $vars);
}
}
我的问题是为什么我必须在站点控制器中使用this $vars['site'] = $this;
来使用在前端控制器中添加的vars数组并传递给视图,
感谢
答案 0 :(得分:2)
我认为你的代码根本不适用于CI,我只会回答你的问题
控制器无法扩展另一个控制器,CI不允许它,而是需要在应用程序/核心目录中创建一个My_controller.php,在那里添加nessecary代码并在控制器中扩展该类,现在用于我将开始根据您的代码为您提供示例
<强>应用/核心/ My_controller.php 强>
class Main extends CI_controller {
// methods and vars....
}
class Front extends Main {
function __construct() {
parent::__construct();
$this->load_main_vars();
}
function load_main_vars() {
$vars = [];
//assigning some vars to $vars
$this->load->vars($vars);
}
}
现在您可以创建控制器:
<强>应用/控制器/ Site.php 强>
class Site extends Front {
function __construct() {
parent::__construct();
}
function index() {
$this->view('site/index'); // now all vars are accesable in your view
}
}
这是在CI中完成您想要的正确方法
答案 1 :(得分:0)
您的示例远离安全应用程序。
不推荐将$this
专用于要输出的某个变量。
在该变量中存储了许多私有数据,例如数据库凭证
并且你不会处理允许查看文件的那些。
如果我应该做出决定,我会将该应用程序评为CodeIgniter世界中最不安全的应用程序。选择该源代码为危险的不安全。
$this
get_instance()
取而代之的是:
在核心控制器中创建一个你可以接近的数组。 它可以是顶级核心类,因此您可以在子类中使用该数组。
class Front extends Main
{
public $data = array();
function __construct()
{
parent::__construct();
$this->data['front_vars'] = $this->load_main_vars();
}
private function load_main_vars()
{
$vars['title'] = $this->option->get('title');
$vars['keywords'] = $this->option->get('keywords');
$vars['description'] = $this->option->get('description');
$this->db->order_by('category_name', 'ASC');
$this->db->where('category_active', 1);
$vars['categories'] = $this->db->get_where('categories', array('category_state' => 1))->result();
$this->load->vars($vars);
}
}
class Site extends front
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->view('site/index', $this->data['front_vars']);
}
}
在严格编码中,要注意类名(和文件)的大写情况以及方法的可见性。