2013-06-25 15 views
0

我已经在整个互联网上查找了一个答案,但是我找不到它,所以我会在这里问。我在一些网站的形式和我不知道如何通过$ _ POST到我想到的一些选项在这里,他们是模型:

方法1:

访问直接从模型中$_POST我用这种方法看到的问题是,现在我的模型与我的观点紧密相关,这使我的模型无法重用。

方法2:

创建$data数组,它包含该发布信息,但再次,如果我有10+场在我的形式分配给所有这些变量是乏味做的,在模型中我必须知道我在控制器中命名的关键。

方法3:

传递每个$_POST键作为一个参数模型的功能,但是这提出了一个类似的问题,方法2,如果我有10+领域中会有很多的参数,如果之后我想添加一个新参数,这是很多重写的代码。

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

+0

我没有在MVC太多的经验,其实IM stargin,但据我所知,你不应该通过该发布信息到控制器?并通过岗位所需的模型,你的模型应该很好脚本足以形成查询,或者你可以做一个特定的模式扩展标准之一,即使它不能重复使用,有时会发生,而不是100%的代码必须可重用 – aleation

+0

@aleation说的+1,控制器处理POST,做任何需要的事情(验证,业务逻辑...)并填充模型。型号甚至不应该知道POST存在,它只是POPO(普通旧PHP对象) –

+0

我把验证模型。 –

回答

0

该模型是一个。首先,您需要了解模型中发生了什么,并且您可以阅读关于该here的信息。

现在我们已经清除了,让我们来解决您的问题。您希望将数据从视图传递到模型图层中的某种服务/数据映射器。这是处理相同的每隔一个请求

  • 执行请求您的应用程序
  • 路由句柄发送该请求到适当的控制器
  • 你可能有某种机制,只允许特定的控制器/方法的XMLHttpRequest。如果是这样,在你的路由周围你应该执行你的检查。
  • 您的模型图层(可能是验证服务)验证发布数据并确保它是您的期望。在过去,我确保只有某些键/值存在于数组中。
  • 这个数据传递到服务模型,然后使用它,你认为合适。

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


至于你的“许多领域”,和你担心代码的可重用性/不必重复自己,通过让你使用一个循环从客户端所需要的数据(可能该类使用JavaScript)。然后,如果您将来添加更多数据,循环会自动将其提取并发送给您。

想想你的模型,即多了几分抽象的,它会能够处理循环的输入,而你的黄金。

0

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

<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']阵列和设置的值。

+0

-1:你的'User'实例正在泄漏封装。 –

+0

@tereško所有我要说的是,这是Yii框架做它的方式。 OP问及其他框架如何处理邮政价值,这正是我给他的例子。 – Pitchinnate

+1

因为我知道Yii有多可怕,所以举一个例子来看,它似乎是一个非常糟糕的dea。 –

相关问题