我在互联网上寻找答案,但我找不到,所以我会问这里。我在网站上有一些表单,我不知道如何将$ _POST传递给模型我在这里考虑了一些选项:
方法1:
直接从模型访问$_POST
我用这种方法看到的问题是现在我的模型被绑定到我的视图,这使得我的模型不可重复使用。
方法2:
创建一个包含帖子信息的$data
数组,但是如果我在表单中有10个以上的字段,那么分配所有这些变量是很繁琐的,在模型中我必须知道我在哪里命名了密钥控制器。
方法3:
将每个$_POST
键作为参数传递给模型函数,但是这给方法2提出了类似的问题,即如果我有10个以上的字段,那么会有很多参数,如果我想添加一个新的参数以后需要重写很多代码。
我想知道其他php程序员是如何做到这一点的。
答案 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。
现在我们已经解决了,让我们解决你的问题。您希望将视图中的数据传递到模型层中的某种服务/数据映射器。处理与其他所有请求相同。
基本上,将$_POST
请求视为与任何其他请求相同,只需检查(使用您自己的或框架内置方法)它是您需要的请求类型和内容,然后照常使用它。 / p>
至于你的“很多领域”,你担心代码重用性/不必重复自己,使用循环从客户端获取所需的数据(也许通过使用JavaScript的类) )。然后,如果您将来再添加任何数据,循环将自动将其拾取并发送给您。
在你的模型中思考一点抽象,即它能够处理循环的输入,你就是金色的。