Php CodeIgniter MVC:每个控制器有多个型号?
我被推进了一个现有的CodeIgniter项目,我正在熟悉MVC方法的适当约定。有一件事我一直坚持,那就是模型和控制器的关联。CI文档对此几乎没有任何指导,我不确定正确的方法是什么。我们的项目是一个由外部应用程序调用的API,所以我不关心视图,只关心模型和控制器 这是一个现成的例子,而不是一个实际的例子,但希望它能帮助我理解:假设我正在制作一个包含小游戏和虚拟商店的应用程序。玩家可以通过玩小游戏获得积分。他们可以在商店里花费这些积分来购买物品。他们还可以在商店里出售物品以赚取积分。应用程序应记录每次积分交易 在这种情况下,我的想法是:Php CodeIgniter MVC:每个控制器有多个型号?,php,codeigniter,model-view-controller,Php,Codeigniter,Model View Controller,我被推进了一个现有的CodeIgniter项目,我正在熟悉MVC方法的适当约定。有一件事我一直坚持,那就是模型和控制器的关联。CI文档对此几乎没有任何指导,我不确定正确的方法是什么。我们的项目是一个由外部应用程序调用的API,所以我不关心视图,只关心模型和控制器 这是一个现成的例子,而不是一个实际的例子,但希望它能帮助我理解:假设我正在制作一个包含小游戏和虚拟商店的应用程序。玩家可以通过玩小游戏获得积分。他们可以在商店里花费这些积分来购买物品。他们还可以在商店里出售物品以赚取积分。应用程序应记录
- ShopModel-与数据库交互以加载产品数据并保存用户购买的物品
- 小游戏模型-与数据库交互以加载有关小游戏的数据并保存分数
- PointsModel-与数据库交互,将点数转入或转出玩家帐户(并在“日志”表中写入相应的日志条目)
- ShopController-利用ShopModel和PointsModel
- 迷你游戏控制器-利用迷你游戏模型和点模型
请不要挂断数据库结构或类似的东西。这不是一个真实的例子。我只是想弄清楚如何组织课堂。我会给你一些建议:
<?php if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
class Menu {
public $ci;
public $table="tblmenu";
public $full_record = array();
function __construct() {
$this->ci = &get_instance();
$this->company_id = $this->ci->session->userdata('company_id');
}
public function get_menu($comp_id = NULL) {
$comp_id = ($comp_id) ? $comp_id : $this->company_id;
$this->ci->db->select()->from($this->table)->where('company_id', $comp_id);
$this->ci->db->where('visible', 1);
$this->ci->db->order_by('id', 'ASC');
$this->full_record = $this->ci->db->get()->result_array();
return $this->full_record;
}
}
这真的和你想的一样简单。Codeigniter中的模型只需将db结果传递给控制器或自定义类,然后再传递给控制器 您可以在控制器中加载任意多个模型-这根本不是问题。就我个人而言,我试图使我的model>db表保持一对一的关系。如果我需要处理模型中的数据,我通常会添加一个库(自定义类)来处理该部分
这样我的控制器就能保持干净。你的思路肯定是对的。保持逻辑段分开并保持干燥。您完美地创建了模型(每个模型用于单独的任务),您可以在一个控制器中使用多个模型,也可以在多个控制器中使用一个模型。我有一个强烈的印象,即CI的约定是仅从模型访问数据库。那印象不准确吗?不!这是没有必要的,您可以一起使用库和助手函数来完成工作。
$this->load->library('menu');//or auto load it .
$this->menu->get_menu();