我发现当我在Codeigniter 2表单中使用set_value()
时,为了重新填充表单字段,如果我为此输入设置了验证规则,则只返回一个值。
如果我正在验证某个字段,那么这很好,但如果它是一个没有验证的可选输入则不行。
所以我现在计划为我处理的每个表单做标准,在添加任何真正的验证规则之前,添加这个小的hack来创建'空'规则;
//iterate over every posted value and create an empty rule for it.
foreach ($this->input->post() as $key => $value) {
$this->form_validation->set_rules($key);
}
然后,如果我有任何“真正的”规则,我会在之后添加它们,以便它们覆盖以前的空规则。
我想知道的是,还有另一种方法可以做到这一点,内置于框架中吗?似乎有点遗漏,set_value()
函数无法使用这些值,直到它们有规则,这让我想知道我是否错过了配置选项?
答案 0 :(得分:1)
您可以使用set_value
来获取其提交的值,而不是$this->input->post()
。
例如:
<input name='test_name' type='text' value = '<?php echo $this->input->post("test_name");?>' />
答案 1 :(得分:1)
如果您正在使用验证库,则必须至少设置一个 您的字段的验证规则以获取set_value()表单帮助程序 工作的功能。
如果您有兴趣了解这背后的原因和/或set_*()
功能如何运作,您可以参考我的答案:
在这个特定的例子中,我建议使用$_POST[$key]
来获取字段的发布值。因为Input::post()
方法除了从$_POST
读取值之外没有做任何其他事情。
因此,您可以获得如下值:
$value = isset($_POST[$field]) ? $_POST[$field] : 'default value';
// Or echo off the errors
$value = @$_POST[$field]) ?: 'default value'; // PHP 5.3+ syntax
(查看result)。
您还可以扩展CI表单助手以添加新的帮助程序函数:
<强>应用\助手\ MY_form_helper.php 强>
if (! function_exists('get_value')) {
function get_value($field = '', $default = '')
{
if (! isset($_POST[$field]))
{
if (count($_POST) === 0 AND $default !== '')
{
return $default;
}
return '';
}
return $_POST[$field];
}
}
然后可以使用如下的辅助函数:
<input name="my_field" type="text" value="<?php echo get_value('my_field', 'Default Value'); ?>">