codeigniter $ this-> load->控制器

时间:2015-05-25 23:09:23

标签: php codeigniter

你好找到了基于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数组并传递给视图,

感谢

2 个答案:

答案 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世界中最不安全的应用程序。选择该源代码为危险的不安全。

  1. 从不输出$this
  2. 从不输出get_instance()
  3. 再次阅读前两条规则
  4. 取而代之的是:

    在核心控制器中创建一个你可以接近的数组。 它可以是顶级核心类,因此您可以在子类中使用该数组。

    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']);
        }
    

    }

    在严格编码中,要注意类名(和文件)的大写情况以及方法的可见性。