谁应该捕获我的 _POST 美元数据:控制器还是模型



我的问题

我不确定 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
}

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

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

我将选择选项 A

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

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

最新更新