codeigniter似乎没有重用模型对象

时间:2015-04-26 09:01:32

标签: codeigniter

通常,codeigniter使用下面的structrue。

class AController extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('ModelA');
        $this->load->model('ModelB');
        $this->load->model('ModelC');
        ...
    }
}

我在codeigniter中非常新,我只是想知道如果我能更快地做到这一点。我是否应该在每次请求时加载这些模型?它导致反应缓慢。

在python龙卷风的情况下,他们可以存储数据库模型对象,以便所有请求共享一个模型对象。在codeigniter中有这样的方法吗?

4 个答案:

答案 0 :(得分:1)

在使用之前,您需要确保模型已加载。

1.您可以在Controllers构造函数中编写它,这样您就不需要在其他方法中加载模型。例如

class AController extends CI_Controller
{
   public function __construct()
    {
        parent::__construct();
        $this->load->model('ModelA');
        $this->load->model('ModelB');
        $this->load->model('ModelC');
    }
    public function index()
    {
        $this->ModelA->model_funtion();//now you can call model function for m any function of controller.
    }
}

2.您可以在使用前调用它。

class AController extends CI_Controller
{
   public function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        $this->load->model('ModelA');
        $this->ModelA->model_funtion();
    }
}

3.您可以加载autoload.php内部。因此该模型可以在任何地方使用(在任何控制器内)。

答案 1 :(得分:0)

如果你想在 大多数地方 ,但 并非在所有地方 ,那么作为替代方案,您可以创建自定义控制器,然后使用它。

<强> 1。 /application/core/Custom_Controller.php的代码:

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

class Custom_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->model('ModelA');
        $this->load->model('ModelB');
        $this->load->model('ModelC');
    }
}

<强> 2。然后将Controller扩展为:

include_once(APPPATH.'core/Custom_Controller.php');
class AController extends Custom_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        // Do something
    }
}

答案 2 :(得分:0)

请试试..

class AController extends CI_Controller
{
    function __construct(){
        parent::__construct();
        $this->load->model('ModelA');
        $this->load->model('ModelB');
        $this->load->model('ModelC');
    }
    public functionname()
    {
        $this->ModelA->modelfunctionname();
    }
}

答案 3 :(得分:0)

我意识到重用是不可能的,但我找到了更好的方法。 像这样的东西。

class AController extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $method = $this->router->fetch_method();
        switch($method) {
            case "method1":
                $this->load->model('ModelA');
            case "method2":
                $this->load->model('ModelB');
                break;
            default:
                $this->load->model('ModelA');
                $this->load->model('ModelC');
        ...
    }
}