PHP MVC - 理解适当的控制器和模型角色

时间:2014-09-23 03:30:39

标签: php codeigniter

我最近一直在使用Codeigniter框架开发Web应用程序,并且已经与Opencart合作了几年。我已经阅读了PHP中的MVC实现,并了解到在各种PHP MVC框架中应用的MVC模式的纯度或正确性存在很多分歧。 我想问一下在这里经验更丰富的人会怎样处理以下情况的“更正确”方法。

我有一个包含任意数据的数据库,例如 table_1 table_2 ,。 table_3 ,每个都有一个稍微不同的架构。

我努力使我的SQL查询尽可能通用,所以我使用这样的变量:

SELECT * FROM '.$sTable.' WHERE '.$sUserRefCol.' = 123

我还将每个表特定信息存储在配置数组中,例如

$config['db_map'][1] = array(
    'table' = 'table_1',
    'user_ref' = 'seller_id',
    'cols' = array(...)
);

因此,根据用户输入(POST参数),我得到特定部分的DB变量。 我不确定这种“映射”是否应该在控制器中发生,或者我可以在模型中进行。

现在,我在控制器中执行此操作,例如:

$section = $_POST['id'];
$db_map = $config['db_map'][$section];
$sTable = $db_map['table'];
$sUserRefCol = $db_map['user_ref'];
...

然后我将所有这些传递给模型方法,如:

$this->my_model->get_data($section, $sTable, $sUserRefCol);

所以,我的问题是:我可以将$ section id传递给模型并让它处理配置的加载吗?

另一个例子是,我们有一个与用户部门或部门或访问权限等相关的会话变量,而不是POST参数。

我应该在控制器中读取这些值,然后使用适当的参数调用适当的模型方法吗?或者我可以直接打电话给

$this->my_model->my_smart_method();

会读取会话变量并执行适当的操作吗?

2 个答案:

答案 0 :(得分:1)

您的控制器应该对您的数据库一无所知。它只是要求模型中的数据。例如,如果可能要求用户模型中的用户列表。它唯一知道的是它需要一个用户列表。存储列表的位置和方式是模型的问题。用户列表可以在数据库,其他网站,平面文件等中......控制器命令鸡。这个模型是厨房。控制器不知道鸡的购买地点,准备方式等等......它只是点了一只鸡并得到了一只鸡。

答案 1 :(得分:0)

非常感谢你提出一个简短的问题。首先,让我清楚一点,控制器不与数据库或表交互,即使他们不知道你要使用哪个表等。所有控制器都知道它的相对模型。我想如果你研究得有点深,它会清除你所有的困惑。我发现并阅读了一篇关于MVC模式的精彩文章,这篇文章很出色,这里是link