2013-11-18 5 views
2

Я включаю персонализированные сообщения об ошибках для каждого поля ввода для каждого правила проверки. Правила заключаются в следующем.CodeIgniter Правила валидации не работают

$config = array(
'firstname' => array(
    'trim' => array(
     'label' => 'First Name', 
     'rule' => 'trim' 
    ), 
    'xss_clean' => array(
     'label' => 'First Name', 
     'rule' => 'xss_clean' 
    ), 
    'required' => array(
     'label' => 'First Name', 
     'rule' => 'required', 
     'message' => 'This field is required.' 
    ) 
), 
'lastname' => array(
    'trim' => array(
     'label' => 'Last Name', 
     'rule' => 'trim' 
    ), 
    'xss_clean' => array(
     'label' => 'Last Name', 
     'rule' => 'xss_clean' 
    ), 
    'required' => array(
     'label' => 'Last Name', 
     'rule' => 'required', 
     'message' => 'This field is required.' 
    ) 
), 
'email' => array(
    'valid_email' => array(
     'label' => 'Email', 
     'rule' => 'valid_email', 
     'message' => 'This field should be email.' 
    ), 
    'required' => array(
     'label' => 'Email', 
     'rule' => 'required', 
     'message' => 'This field is required.' 
    ) 
), 
'password' => array(
    'match' => array(
     'label' => 'Confirm Password', 
     'rule' => 'matches[confirm_password]', 
     'message' => 'These passwords don\'t match. Try again?.' 
    ), 
    'length' => array(
     'label' => 'Password', 
     'rule' => 'min_length[6]', 
     'message' => 'This field should\'ve atleast 6 characters.' 
    ), 
    'required' => array(
     'label' => 'Password', 
     'rule' => 'required', 
     'message' => 'This field is required.' 
    ) 
), 
'confirm_password' => array(
    'required' => array(
     'label' => 'Confirm Password', 
     'rule' => 'required', 
     'message' => 'This field is required.' 
    ) 
)); 
foreach($config as $key => $fields) { 
foreach($fields as $rule => $field) { 
    if(isset($field['message']) && !empty($field['message'])) { 
     $field['rule'] = preg_replace('/\[.*\]/', '', $field['rule']); 
     $this->form_validation->set_message($field['rule'], $field['message']); 
    } 
    $this->form_validation->set_rules($key, $field['label'], $field['rule']); 
} 

}

if ($this->form_validation->run()) { 
    return true; 
} 
return false; 

Но valid_email 'min_length' и matches правила не работают. Пожалуйста, помогите мне найти решение. Буквально тратя время на это. Работа будет более приемлемой.

ответ

0

относительно min_length и matches вы должны удалить или прокомментировать линию

$field['rule'] = preg_replace('/\[.*\]/', '', $field['rule']);

это удалить скобки [] с его внутренним состоянием, которое требуется для роли запустить

не о valid_email ничего плохого с это, возможно, вам нужно проверить имя поля в представлении/форме.

или вы могли бы просто использовать традиционный метод:

$this -> form_validation -> set_rules('firstname', 'First Name', 'trim|xss_clean|required'); 
    $this -> form_validation -> set_rules('lastname', 'Last Name', 'trim|xss_clean|required'); 
    $this -> form_validation -> set_rules('email', 'Email', 'required|valid_email'); 
    $this -> form_validation -> set_rules('password', 'Password', 'required|min_length[6]|matches[confirm_password]'); 
    $this -> form_validation -> set_rules('confirm_password', 'Confirm Password', 'required'); 
    $this -> form_validation -> set_message('required', ' %s Required'); 
    $this -> form_validation -> set_message('valid_email', 'Invalid %s'); 
    $this -> form_validation -> set_message('min_length', '%s should\'ve at least 6 characters.'); 
    $this -> form_validation -> set_message('matches', 'These passwords don\'t match. Try again?.'); 
    if ($this -> form_validation -> run()) { 
     return true; 
    } 
    return false; 
Смежные вопросы