Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 谁应该捕获我的$\u POST数据:控制器还是模型? 我的问题_Php_Post_Model View Controller - Fatal编程技术网

Php 谁应该捕获我的$\u POST数据:控制器还是模型? 我的问题

Php 谁应该捕获我的$\u POST数据:控制器还是模型? 我的问题,php,post,model-view-controller,Php,Post,Model View Controller,我不确定在MVC架构中如何处理$\u POST数据:谁应该捕获$\u POST数据:控制器还是模型?有几个消息来源称“瘦控制器,胖模型”,但同样的消息来源也说模型应该与应用程序严格解耦(示例B清楚地显示了一个“胖”模型,但并没有解耦,因为它直接要求POST数据)。为了进行比较,让我们看一下用两种不同方式编写的相同内容(示例伪代码): A.)控制器获取$\u POST值,将其作为参数传递给模型 // CONTROLLER public function createSomething() {

我不确定在MVC架构中如何处理$\u POST数据:谁应该捕获$\u POST数据:控制器还是模型?有几个消息来源称“瘦控制器,胖模型”,但同样的消息来源也说模型应该与应用程序严格解耦(示例B清楚地显示了一个“胖”模型,但并没有解耦,因为它直接要求POST数据)。为了进行比较,让我们看一下用两种不同方式编写的相同内容(示例伪代码):

A.)控制器获取$\u 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.)模型获取$u 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
}

您的控制器应该管理所有验证,并且只将验证/清除的数据传递给您的模型。这样做的原因是,您希望使您的模型具有足够的通用性,以便重复使用,并且所有对模型/数据库的访问都应该在开始之前进行验证/清理


也不要直接使用
$\u POST
如果您使用的是类似CodeIgniter的东西,那么请使用它们的处理程序
$input->POST->('name')(或类似地适用于任何PHP框架)。

我将选择A

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


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

检查关于这一点的公认答案-应该可以帮助您