codeigniter控制器内的模型查询过多
我没有找到类似的话题,所以我想问: 如何克服对所有CodeIgniter控制器函数重复相同模型查询的问题?对于我的站点,我必须在几乎相同的重复数据库查询上构建页眉和页脚,如下所示:codeigniter控制器内的模型查询过多,codeigniter,model,controller,Codeigniter,Model,Controller,我没有找到类似的话题,所以我想问: 如何克服对所有CodeIgniter控制器函数重复相同模型查询的问题?对于我的站点,我必须在几乎相同的重复数据库查询上构建页眉和页脚,如下所示: class Main extends CI_Controller { public function aboutus() { $this->load->model("read_db"); $commondata["title"] = "Company -
class Main extends CI_Controller
{
public function aboutus()
{
$this->load->model("read_db");
$commondata["title"] = "Company - ".lang("aboutus");
$commondata["mainmenu"] = $this->read_db->db_mainmenu();
$commondata["mainprodcat"] = $this->read_db->db_allprodmaincat();
$commondata["bestselling"] = $this->read_db->db_bestselling();
$commondata["brochures"] = $this->read_db->db_allbrochures();
$this->load->view("headerview", $commondata);
$contentdata["aboutus"] = $this->read_db->db_aboutus();
$this->load->view("view_aboutus", $contentdata);
$this->load->view("footerview");
}
public function contact()
{
$this->load->model("read_db");
$commondata["title"] = "Company - ".lang("contact");
$commondata["mainmenu"] = $this->read_db->db_mainmenu();
$commondata["mainprodcat"] = $this->read_db->db_allprodmaincat();
$commondata["bestselling"] = $this->read_db->db_bestselling();
$commondata["brochures"] = $this->read_db->db_allbrochures();
$this->load->view("headerview", $commondata);
$contentdata["aboutus"] = $this->read_db->db_contact();
$this->load->view("contactview", $contentdata);
$this->load->view("footerview");
}
*further functions like this*
}
是否可以将相同的重复模型调用外包给另一个函数或文件?
非常感谢您的建议。您可以在模型中创建一个组函数,然后从控制器中仅调用该函数。 例如: 模型 控制器
$commondata = $this->read_db->db_bundle();
请注意,您可以根据需要的页面对呼叫进行分组,而不是捆绑,这样您就可以为联系人、关于我们的信息等建立单独的分组。。。或者,您可以让bundle函数接受参数,这些参数将允许您控制哪些函数应该从内部调用,哪些函数不应该从内部调用。这不是一个直接的答案,所以我将其作为注释来写,但您应该考虑缓存这些数据。您可以每小时生成一次页脚,而不是每次调用生成一次页脚。Smarty有这样的缓存处理,Memcache就是为它而设计的,Redis非常值得一试。@ZsoltSzilagy CodeIgniter有自己的缓存处理,它非常好。@ZsoltSzilagy Köszi Zsolt!这是一个好主意,但我想我还是必须在第一次调用页面时生成它,即使它将被兑现。谢谢你,Shomz,我以前尝试过,但由于某种原因它不起作用(我可能没有将$data声明为数组)。现在我再次尝试了你的代码建议,效果非常好。又来了!不客气。。。可能是您忘记从模型调用中删除
read_db
。如果答案对你有帮助,别忘了接受。干杯
$commondata = $this->read_db->db_bundle();