最佳实践:模型和控制器

时间:2014-02-11 13:03:05

标签: codeigniter model-view-controller

我想通过以下方式获得您的MVC经验:

我有一张表格,其中我说user_id哪个group_id和第二个表格,其中我说user_id哪个user_name

现在我想要一个我传递group_id的函数,它会给我组中的所有user_name个。

问题是,Controller做了什么以及模型是什么:

  1. 控制器调用返回用户ID的模型(get_user_ids_from_group),然后控制器调用不同的模型(get_user_name_by_id)以返回用户名。

  2. 控制器调用Model(`get_user_names_from_group),模型内部首先获取用户ID,然后是用户名。

  3. 据我所知,第一种方式是更严格的MVC。但是在这样的情况下你会有多严格?现在我总是非常严格。

    结果我的模型函数总是只有两行(查询和返回),我的控制器更大。因此,为了使控制器和模型尺寸更加平等,第二种选择是可能的。

3 个答案:

答案 0 :(得分:2)

实际上,它与MVC无关,如CodeIgniter doesn't implement MVC,而是一种 MVP

但是,如果你正在使用像MySQL这样的RDBMS,你可以JOIN这两个表(在模型中)并按照我在 {{3}中的建议获取结果(在Controller中)在

上。

<强>应用/模型/ user.php的

class User extends CI_Model
{
    public function get_users_by_group($group_id)
    {
        $this->db->select('*')->from('groups');
        // While group_id and user_id have a N:1 relation
        $this->db->where('group_id', $group_id);
        $this->db->join('users', 'users.user_id = groups.user_id');
        $query=$this->db->get();
        return $query->result_array();
    }
}

然后在Controller中获取并传递结果:

<强>应用/控制器/ users.php

class Users extends CI_Controller
{
    public function view($group_id)
    {
        $this->load->model('user');
        // Fetch the result from the database
        $data['users'] = $this->user->get_users_by_group($group_id);
        // Pass the result to the view
        $this->load->view('users_view', $data);
    }
}

答案 1 :(得分:0)

在MVC模型中,不仅应该用于存储和获取数据,还应该包含业务逻辑。

控制器 - 应该将输入与模型和视图进行通信

模型 - 应包含业务逻辑和数据存储

查看 - 仅适用于输出

所以它就像Input -> Process -> Output

此外,它依赖于你在哪里放置什么,你应该在控制器和模型上有一个平衡代码,不在控制器或模型中写入所有内容

在你的情况下,我认为你应该使用get_user_names_from_group并只传递组名并在两个表之间进行连接查询。当您在模型中定义函数时,它为您提供了再次重用该函数的选项,以防您在下一个控制器上需要相同的内容。

答案 2 :(得分:0)

通用模型示例:

{{1}}