如何将$ _POST传递给php mvc中的模型

时间:2013-06-25 15:35:42

标签: php model-view-controller

我在互联网上寻找答案,但我找不到,所以我会问这里。我在网站上有一些表单,我不知道如何将$ _POST传递给模型我在这里考虑了一些选项:

方法1:

直接从模型访问$_POST我用这种方法看到的问题是现在我的模型被绑定到我的视图,这使得我的模型不可重复使用。

方法2:

创建一个包含帖子信息的$data数组,但是如果我在表单中有10个以上的字段,那么分配所有这些变量是很繁琐的,在模型中我必须知道我在哪里命名了密钥控制器。

方法3:

将每个$_POST键作为参数传递给模型函数,但是这给方法2提出了类似的问题,即如果我有10个以上的字段,那么会有很多参数,如果我想添加一个新的参数以后需要重写很多代码。

我想知道其他php程序员是如何做到这一点的。

2 个答案:

答案 0 :(得分:0)

不确定其他框架,但在Yii中,当您使用模型生成表单时,它使用模型名称和表单元素名称的属性。例如,如果您有一个名为User的模型,其中包含username,firstname和lastname的属性。它会创建如下形式:

<form>
    <input type='text' name='User[username]' id='User_username'>
    <input type='text' name='User[firstname]' id='User_firstname'>
    <input type='text' name='User[lastname]' id='User_lastname'>
    <input type='submit'>
</form>

这样所有值都存储在一个数组中。然后你可以简单地说:

//DONE INSIDE CONTROLLER
$user = new User();
$user->attributes = $_POST['User'];
//or if you need to you can store individual values
$user->username = $_POST['User']['username'];

如果您没有以这种方式进行模型设置,则可以轻松地向模型添加一个函数,您可以将$_POST['User']数组发送到并设置值。

答案 1 :(得分:0)

  

模型是图层。首先,您需要了解模型图层中发生了什么,然后您可以阅读here

现在我们已经解决了,让我们解决你的问题。您希望将视图中的数据传递到模型层中的某种服务/数据映射器。处理与其他所有请求相同

  • 向您的申请表示请求
  • 路由处理将此请求发送到适当的控制器
  • 您可能有某种机制允许XMLHttpRequests仅允许某些控制器/方法。如果是这样,在您的路线周围的某处,您应该对此进行检查。
  • 您的模型层(可能是验证服务)验证帖子数据并确保它符合您的期望。过去,我确保在post数组中只存在某些键/值。
  • 将此数据传递给模型图层中的服务,然后根据需要使用它。

基本上,将$_POST请求视为与任何其他请求相同,只需检查(使用您自己的或框架内置方法)它是您需要的请求类型和内容,然后照常使用它。 / p>


至于你的“很多领域”,你担心代码重用性/不必重复自己,使用循环从客户端获取所需的数据(也许通过使用JavaScript的类) )。然后,如果您将来再添加任何数据,循环将自动将其拾取并发送给您。

在你的模型中思考一点抽象,即它能够处理循环的输入,你就是金色的。