1
有什么办法来加载从两个验证规则:配置文件,并使用一套规则的方法?广东话负载验证规则,并使用set_rules方法
有什么办法来加载从两个验证规则:配置文件,并使用一套规则的方法?广东话负载验证规则,并使用set_rules方法
不修改CodeIgniter的表单验证类(CI_Form_validation),有没有办法从一个配置文件中加载验证规则和使用规则集的方法。由于表单验证码目前经营,如果没有规则已经另有规定
可以扩展表单验证类,并得到这个工作,但是,相对简单的配置文件规则只检查。创建一个名为MY_Form_validation.php文件,并把它应用/核心/目录。
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()方法定义的规则配置文件规则的优先级。