【发布时间】:2026-01-06 23:35:02
【问题描述】:
我的问题是我是否应该使用 set_value() 来重新填充表单。这么说可能看起来很奇怪,但是我正在创建一个共享控制器功能和视图,可用于添加新记录或编辑现有记录。这样做似乎很有意义,因为功能非常相似。
因此,如果我们调用现有记录进行编辑,我会这样做:
$data['fields'] = $this->customer_model->get_customer($id);
如果提交表单以保存记录,或者如果我们是第一次添加记录,如果用户出错,表单可能会重新加载,因此我填充 $data['fields'] this取而代之的是:
$data['fields'] = array(
'company' => $this->input->post('company') ?: '',
'website' => $this->input->post('website') ?: '',
'credit_limit' => $this->input->post('credit_limit') ?: ''
);
我的表单元素如下所示:
<input type="text" name="company" value="<?php echo set_value('company', $fields['company']); ?>" />
但我认为它可能看起来像这样:
<input type="text" name="company" value="<?php echo escape_html($fields['company']); ?>" />
由于表单数据可能来自用户输入(添加或保存时)或来自数据库(检索要编辑的记录时),我不能完全依赖 post() 或 set_value() 而没有第二个参数。此外,set_value() 的第二个参数将始终存在(在此示例中为$fields['company']),因为它是从一开始就初始化的,这就是我想直接使用它的原因。
这种方法有问题吗?
【问题讨论】:
-
我不认为这种方法有问题,我在我的大多数项目中都使用相同的方法......我也不知道是否有任何“规则”反对它...... .
-
使用 set_value() 表单辅助函数的唯一好处是
simplify setting the value已经提交的值,以便重新显示它 -
就个人而言,我更喜欢使用表单助手 set_value(),因为您想使用相同的表单来添加新记录和编辑现有记录。另外,当提交的值仍然会通过服务器端的codeIgniter form_validation()预设规则传递时,使用escape_html()确实没有什么大的理由。
标签: php forms codeigniter