谁应该抓住我的$ _POST数据:控制器或型号?

时间:2013-12-24 14:31:20

标签: php post model-view-controller

我的问题

我不确定在MVC架构中处理$ _POST数据:谁应该抓住$ _POST数据:控制器还是模型?有几个消息来源称“瘦的控制器,脂肪模型”,但相同的消息来源也说模型应该与应用程序严格分离(示例B清楚地显示“胖”模型,但由于它直接要求POST数据而没有解耦) 。为了比较,让我们看到以两种不同的方式写的相同的东西(例如伪代码):

A。)控制器获取$ _POST值,将其作为参数传递给模型

// CONTROLLER
public function createSomething()
{
    $model = new Model;
    $model->createThis($_POST['stuff_from_form']);
}

// MODEL (expects argument)
public function createThis($stuff)
{
    // and here the model method does whatever it does
}

B。)模型获取$ _POST值

// CONTROLLER
public function createSomething()
{
    $model = new Model;
    $model->createThis();
}

// MODEL (expects NO argument, grabs POST data directly)
public function createThis()
{
    $stuff = $_POST['stuff_from_form'];
    // and here the model method does whatever it does
}

2 个答案:

答案 0 :(得分:2)

您的控制器应管理所有验证,并仅将经过验证/清理的数据传递给您的模型。这样做的原因是您希望保持模型的通用性,以便重复使用,并且应该事先验证/清理对模型/数据库的所有访问。

如果您使用的是CodeIgniter,请不要直接使用$_POST,然后使用其处理程序$input->post->('name');(或类似地使用任何PHP框架)。

答案 1 :(得分:1)

我会选择 A

因为如果需要,您可以通过稍后传递不同的参数来重用代码,而不是通过函数内容并更改变量。

在将变量推送到模型之前过滤/清理变量也是一种很好的做法,因此模型只需要考虑收到的数据。