通常,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中有这样的方法吗?
答案 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');
...
}
}