Я пытаюсь сделать проверку для 2 полей, которые должны иметь другое значение. Я знаю только, как устанавливать правила для проверки соответствия.
$this->form_validation->set_rules('book1','Book1','required|matches[book2]');
$this->form_validation->set_rules('book2','Book2','required|matches[book1]');
если я буду вводить book1
= novel
, а book2
= novel
, код выше вернет TRUE
.
Как я могу проверить 2 поля, где значение каждого поля не соответствует друг другу? Поэтому, если я буду вводить book1
= novel
и book2
= comic
, он вернет TRUE
.
Вы должны использовать метод callback_
для выборочной проверки, библиотека проверки формы CI не предоставляет правило проверки типа notMatch, см. Ниже пример кода.
$this->form_validation->set_rules('book1','Book1','required');
$this->form_validation->set_rules('book2','Book2','required|callback__notMatch[book1]');
И метод размещения в классе контроллера
function _notMatch($book2Value, $book1FieldName){
if($book2Value != $this->input->post($book1FieldName){
$this->form_validation->set_message('_notMatch', 'book1 and book2 values are not matching');
return false;
}
return true;
}
В кодеигниторе 3 вы можете использовать правило set [], чтобы обеспечить соответствие значений полей.
$this->form_validation->set_rules('book1', 'Book 1', 'required|differs[book2]');
$this->form_validation->set_rules('book2', 'Book 2', 'required|differs[book1]');
Это означает, что вам не нужно создавать ненужный обратный вызов. Однако для более старых версий вы будете.
См. Документацию для получения дополнительной информации: Документация Codeigniter 3
Вы можете использовать differs
так:
$this->form_validation->set_rules('password', 'current password', 'max_length[25]|min_length[5]|required');
$this->form_validation->set_rules('new_password', 'new password', 'max_length[25]|min_length[5]|required|differs[password]');
$this->form_validation->set_rules('confirm_password', 'confirm password', 'required|max_length[25]|min_length[5]|matches[new_password]');
!=
Становись==
и установи мое сообщение об ошибке, чтобыyou can't choose the same book again
.