我不确定在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
}
答案 0 :(得分:2)
您的控制器应管理所有验证,并仅将经过验证/清理的数据传递给您的模型。这样做的原因是您希望保持模型的通用性,以便重复使用,并且应该事先验证/清理对模型/数据库的所有访问。
如果您使用的是CodeIgniter,请不要直接使用$_POST
,然后使用其处理程序$input->post->('name');
(或类似地使用任何PHP框架)。
答案 1 :(得分:1)
我会选择 A 。
因为如果需要,您可以通过稍后传递不同的参数来重用代码,而不是通过函数内容并更改变量。
在将变量推送到模型之前过滤/清理变量也是一种很好的做法,因此模型只需要考虑收到的数据。