我正在修改作为Web应用程序一部分的表单组件,以支持用户在运行时添加和删除多余的表单字段。
表单提交时,表单中的数据被设置为php对象:
<?php
class users {
public function setName($name){
(...)
}
public function getName(){
(...)
}
public function setSomeAttribute($name){
(...)
}
public function getSomeAttribute(){
(...)
}
}
表单生成如下:
$form = new Form();
$form->addField('Text', 'Name', (... some other parameters...))
->addField('Address', 'SomeAttribute', (... some other parameters...));
生成一个视图,其中包含表示每个字段的对象树(某些“字段”,例如地址,可以包含子字段,如文本输入。
鉴于我们知道对象属性的名称,表单组件可以使用getter和setter轻松地将该表单字段的结果绑定到相应的对象属性。
我现在面临的问题是:我需要允许用户在运行时添加字段。这将使用Jquery,也可以为没有javascript的用户提供后备。
假设我们有一个页面,用户可以编辑他的个人资料并添加多个送货地址。他将有一个显示“添加地址”的按钮。单击此按钮将执行以下操作:
让PHP方知道这些新字段存在且我们需要从中获取发布数据的最佳方法是什么?
答案 0 :(得分:1)
所有表单元素都将在请求中提交并可供PHP使用。因此,您只需要使用表单中指定元素的任何名称来引用元素。
对于2个地址的国家/地区,您要为“addr_1_country”,“addr_2_country”或“addr_country []”等元素命名,以使数值中的值可用。如果你使用前者,你可以循环通过名称“addr_ $ i_country”,直到你发现它们未设置(或让JQuery更新一个也被提交的计数值,比如“addr_count”告诉你循环多长时间。) / p>
无论哪种方式,你只需要知道名字。但是,如果您只能指定“地址”和/或子字段的名称是您无法自行分配的,那么您可能会遇到问题。也许你的“ - &gt; addField()”非常聪明,可以为你命名。否则请自动更新“表格”或接受“姓名”参数。
答案 1 :(得分:1)
无论哪种方式,提交表单都会在$ _REQUEST($ _GET和$ _POST)中填充一个数组,其中包含所有表单字段及其必需值。你可以有一个setter函数,它接受这个数组,找到新的,并动态设置它们。
我假设你有一定数量的新字段,你可以只为它们制作getters和setter,然后在php端提交循环$ _REQUEST并调用setter来获取正确的字段。
foreach ($_REQUEST[] as $field){ // IF STATEMENT TO DETERMINE WHAT FIELD THIS IS BASED ON FIELD NAME }