Не могу загрузить правила проверки как из файла конфигурации, так и с помощью метода set_rules - PullRequest
1 голос
/ 04 марта 2011

Есть ли способ загрузить правила проверки как из файла конфигурации, так и с помощью метода заданных правил?

1 Ответ

2 голосов
/ 05 марта 2011

Без изменения класса проверки формы CodeIgniter (CI_Form_validation) невозможно загрузить правила проверки из файла конфигурации И использовать метод set rules.Поскольку код проверки формы в настоящее время работает, правила файла конфигурации проверяются только в том случае, если правила не были определены иным образом

Вы можете расширить класс проверки формы и заставить его работать, однако, относительно просто.Создайте файл с именем MY_Form_validation.php и поместите его в каталог application / core /.

class MY_Form_validation extends CI_Form_validation {
    // You only need to change the run() method, so we'll define a (modified) version.
    // This will override the existing run() method so that it uses rules set from
    // set_rules() AND from the config file.
    function run($group = '')
{
    if (count($_POST) == 0)
    {
        return FALSE;
    }

            // If there are any configuration rules defined, go ahead and use them
    if (count($this->_config_rules) != 0)
    {
        // Is there a validation rule for the particular URI being accessed?
        $uri = ($group == '') ? trim($this->CI->uri->ruri_string(), '/') : $group;

        if ($uri != '' AND isset($this->_config_rules[$uri]))
        {
            $this->set_rules($this->_config_rules[$uri]);
        }
        else
        {
            $this->set_rules($this->_config_rules);
        }
    }

    // Load the language file containing error messages
    $this->CI->lang->load('form_validation');

    // Cycle through the rules for each field, match the
    // corresponding $_POST item and test for errors
    foreach ($this->_field_data as $field => $row)
    {
        // Fetch the data from the corresponding $_POST array and cache it in the _field_data array.
        // Depending on whether the field name is an array or a string will determine where we get it from.

        if ($row['is_array'] == TRUE)
        {
            $this->_field_data[$field]['postdata'] = $this->_reduce_array($_POST, $row['keys']);
        }
        else
        {
            if (isset($_POST[$field]) AND $_POST[$field] != "")
            {
                $this->_field_data[$field]['postdata'] = $_POST[$field];
            }
        }

        $this->_execute($row, explode('|', $row['rules']), $this->_field_data[$field]['postdata']);
    }

    // Did we end up with any errors?
    $total_errors = count($this->_error_array);

    if ($total_errors > 0)
    {
        $this->_safe_form_data = TRUE;
    }

    // Now we need to re-set the POST data with the new, processed data
    $this->_reset_post_array();

    // No errors, validation passes!
    if ($total_errors == 0)
    {
        return TRUE;
    }

    // Validation fails
    return FALSE;
}

Обратите внимание, я не проверял это на установке CodeIgniter.Но это должно работать.Также обратите внимание, что это будет определять приоритет правил файла конфигурации над правилами, определенными с помощью метода set_rules ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...