我的问题
我不确定 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。
因为如果需要,您可以通过稍后传递不同的参数来重用代码,而不是遍历函数内容并更改变量。
在将变量推送到模型之前对其进行过滤/清理也是一种很好的做法,因此模型只需要考虑接收的数据。