如何将CodeIgniter的set_value用于一个数组的字段?

时间:2010-06-18 17:18:51

标签: codeigniter validation

我有一个标有“amenities []”的下拉列表,它是一个数组。当我使用CodeIgniter的form_validation时,我想使用set_value正确地重新填充它,但我无法。有人对此有任何意见吗?

1 个答案:

答案 0 :(得分:2)

查看Codeignitor 1.7.2的源代码,set_value实现是:

/**
 * Get the value from a form
 *
 * Permits you to repopulate a form field with the value it was submitted
 * with, or, if that value doesn't exist, with the default
 *
 * @access  public
 * @param   string  the field name
 * @param   string
 * @return  void
 */ 
function set_value($field = '', $default = '')
{
    if ( ! isset($this->_field_data[$field]))
    {
        return $default;
    }

    return $this->_field_data[$field]['postdata'];
}

注意它不支持数组。另一方面,Codeignitor的set_select确实支持数组:

// --------------------------------------------------------------------

/**
 * Set Select
 *
 * Enables pull-down lists to be set to the value the user
 * selected in the event of an error
 *
 * @access  public
 * @param   string
 * @param   string
 * @return  string
 */ 
function set_select($field = '', $value = '', $default = FALSE)
{       
    if ( ! isset($this->_field_data[$field]) OR ! isset($this->_field_data[$field]['postdata']))
    {
        if ($default === TRUE AND count($this->_field_data) === 0)
        {
            return ' selected="selected"';
        }
        return '';
    }

    $field = $this->_field_data[$field]['postdata'];

    if (is_array($field))
    {
        if ( ! in_array($value, $field))
        {
            return '';
        }
    }
    else
    {
        if (($field == '' OR $value == '') OR ($field != $value))
        {
            return '';
        }
    }

    return ' selected="selected"';
}