没有验证规则,set_value()无法正常工作

时间:2014-03-10 16:49:34

标签: php codeigniter validation codeigniter-2

我发现当我在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()函数无法使用这些值,直到它们有规则,这让我想知道我是否错过了配置选项?

2 个答案:

答案 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'); ?>">