0

我已经在互联网上寻找答案,但我找不到它,所以我会在这里问。我在站点中有一些表单,我不确定如何将 $_POST 传递给模型,我在这里想到了一些选项:

方法一:

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

方法二:

创建一个$data包含发布信息的数组,但是如果我的表单中有 10 个以上的字段,分配所有这些变量是很乏味的,并且在模型中我必须知道我在控制器中命名的键是什么。

方法三:

将每个$_POST键作为参数传递给模型函数,但这会带来与方法 2 类似的问题,即如果我有 10 多个字段将有很多参数,如果我想稍后添加一个新参数,则需要大量代码改写。

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

4

2 回答 2

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']数组发送到该函数并设置值。

于 2013-06-25T15:49:05.343 回答
0

模型是一个。首先,您需要了解模型层中发生了什么,您可以在此处阅读相关内容。

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

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

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


至于您的“很多字段”,并且您担心代码的可重用性/不必重复自己,请使用循环从客户端获取所需的数据(可能通过使用 JavaScript 的类)。然后,如果您将来添加更多数据,循环将自动将其拾取并发送给您。

在您的模型中考虑更抽象一点,即它将能够处理循环的输入,并且您很出色。

于 2013-06-25T16:06:11.507 回答