Php 如果没有验证规则,set_value()将无法工作

Php 如果没有验证规则,set_value()将无法工作,php,codeigniter,validation,codeigniter-2,Php,Codeigniter,Validation,Codeigniter 2,我发现,当我在Codeigniter 2表单中使用set_value()来重新填充表单字段时,它只会在为此输入设置了验证规则时返回一个值 如果我正在验证一个字段,这很好,但如果它是一个可选输入,没有验证,则不好 所以我现在计划做的是,作为每个表单I流程的标准,在添加任何真正的验证规则之前,添加这个小技巧来创建“空”规则 //iterate over every posted value and create an empty rule for it. foreach ($this->inp

我发现,当我在Codeigniter 2表单中使用
set_value()
来重新填充表单字段时,它只会在为此输入设置了验证规则时返回一个值

如果我正在验证一个字段,这很好,但如果它是一个可选输入,没有验证,则不好

所以我现在计划做的是,作为每个表单I流程的标准,在添加任何真正的验证规则之前,添加这个小技巧来创建“空”规则

//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\u value()
函数的,这让我怀疑我是否错过了一个配置选项?

您可以使用
$this->input->post()
来获取其提交的值,而不是
set\u value

例如:

<input name='test_name' type='text' value = '<?php echo $this->input->post("test_name");?>' />

如果使用验证库,必须至少设置一个
验证规则用于字段获取set_value()表单帮助程序
工作的功能

如果您有兴趣了解这背后的原因和/或
set*()
函数的工作原理,您可以参考我的答案:


在这个特定的实例中,我建议使用
$\u POST[$key]
获取字段的发布值。因为方法除了从
$\u POST
读取值之外,什么都不做

因此,您可以得到如下值:

<input name="my_field" type="text" value="<?php echo get_value('my_field', 'Default Value'); ?>">
$value=isset($\u POST[$field])$_POST[$field]:“默认值”;
//或者对错误进行回应
$value=@$_POST[$field])?:“默认值”;//PHP5.3+语法
(请检查屏幕)


还可以扩展CI表单帮助器,以便添加新的帮助器函数:

application\helpers\MY\u form\u helper.php

如果(!function_存在('get_value')){
函数get_值($field='',$default='')
{
如果(!isset($\u POST[$field]))
{
如果(计数($\u POST)==0和$default!='')
{
返回$default;
}
返回“”;
}
返回$_POST[$field];
}
}
然后可以按如下方式使用帮助器函数:

<input name="my_field" type="text" value="<?php echo get_value('my_field', 'Default Value'); ?>">

我对这个解决方案不感兴趣,因为我也使用带有默认参数的set_value(),这太冗长了,无法放到视图中。我想我可以编写自己的set_value()函数,但我不想重新发明轮子。是的。您可以创建自己的帮助器以获取默认值。比如
my\u set\u value()