Без изменения класса проверки формы 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 ().