Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter MVC:每个控制器有多个型号?_Php_Codeigniter_Model View Controller - Fatal编程技术网

Php CodeIgniter MVC:每个控制器有多个型号?

Php CodeIgniter MVC:每个控制器有多个型号?,php,codeigniter,model-view-controller,Php,Codeigniter,Model View Controller,我被推进了一个现有的CodeIgniter项目,我正在熟悉MVC方法的适当约定。有一件事我一直坚持,那就是模型和控制器的关联。CI文档对此几乎没有任何指导,我不确定正确的方法是什么。我们的项目是一个由外部应用程序调用的API,所以我不关心视图,只关心模型和控制器 这是一个现成的例子,而不是一个实际的例子,但希望它能帮助我理解:假设我正在制作一个包含小游戏和虚拟商店的应用程序。玩家可以通过玩小游戏获得积分。他们可以在商店里花费这些积分来购买物品。他们还可以在商店里出售物品以赚取积分。应用程序应记录

我被推进了一个现有的CodeIgniter项目,我正在熟悉MVC方法的适当约定。有一件事我一直坚持,那就是模型和控制器的关联。CI文档对此几乎没有任何指导,我不确定正确的方法是什么。我们的项目是一个由外部应用程序调用的API,所以我不关心视图,只关心模型和控制器

这是一个现成的例子,而不是一个实际的例子,但希望它能帮助我理解:假设我正在制作一个包含小游戏和虚拟商店的应用程序。玩家可以通过玩小游戏获得积分。他们可以在商店里花费这些积分来购买物品。他们还可以在商店里出售物品以赚取积分。应用程序应记录每次积分交易

在这种情况下,我的想法是:

  • ShopModel-与数据库交互以加载产品数据并保存用户购买的物品
  • 小游戏模型-与数据库交互以加载有关小游戏的数据并保存分数
  • PointsModel-与数据库交互,将点数转入或转出玩家帐户(并在“日志”表中写入相应的日志条目)

  • ShopController-利用ShopModel和PointsModel

  • 迷你游戏控制器-利用迷你游戏模型和点模型
例如,用户告诉应用程序他们想在商店中搜索“武器”。应用程序向控制器请求武器。车间控制器构建查询,车间模型执行查询并返回记录。控制器将记录格式化为JSON并将其发送回应用程序

用户告诉应用程序他们想要购买防护罩。应用程序通知车间管理员。商店管理员从商店模型中查询价格,然后告诉点数模型减去点数,然后告诉商店模型给玩家盾牌。最后,控制器通过JSON通知应用程序购买了屏蔽

这是一个可接受的结构,还是每个控制器只有一个模型?如果每个控制器只有一个模型,如何避免复制粘贴处理点的代码?我这样做完全错了吗


请不要挂断数据库结构或类似的东西。这不是一个真实的例子。我只是想弄清楚如何组织课堂。

我会给你一些建议:

  • 为节省时间,请将此API用于功能上与您相似的应用程序 解释一下

  • 对于常见功能,创建一个库,然后自动加载它,当您需要它时,只需在您想要的地方调用它。您可以在视图、控制器、模型中的每个位置调用库

  • e、 只是一个想法,图书馆看起来像

    <?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();