Я установил CI 2.0.3 и GC 1.1.4 для проверки, потому что на первый взгляд ваш код выглядел нормально. Как оказалось, это так, и ваш код работает. Я изменил готовый метод employees_management в контроллере examples с помощью GC. Добавил столбец user_password в базу данных и добавил свой код в контроллер.
Код гарантирует, что поля пароля совпадают и что они не пусты при отправке.
- Пустые результаты в
"The Password field is required"
- Несоответствующие результаты в
"The Password field does not match the konfirmpass field."
Возможно, если это не работает для вас, вы должны опубликовать весь свой метод, а не только правила и обратные вызовы, чтобы мы могли увидеть, есть ли какие-либо другие проблемы.

Изменить
Для редактирования поля, только если пароль был отредактирован нужно добавить
$crud->callback_before_update( array( $this,'update_password' ) );
function update_password( $post ) {
if( empty( $post['user_password'] ) ) {
unset($post['user_password'], $post['konfirmpass']);
}
return $post;
}
Это, однако, может означать, что вам нужно удалить проверку для пустого пароля в зависимости от того, в каком порядке выполняются обратные вызовы (если они выполняются до или после проверки формы). Если они запускаются перед проверкой формы, вам также нужно будет выполнить вызов callback_before_insert() и добавить свои правила проверки в два обратных вызова. Очевидно, что для вставки потребуется правило required, а для обновления — нет.
Правка 2, разъяснение правки 1
Изучив это, проверка выполняется перед обратными вызовами, поэтому вы не можете установить правила проверки в функциях обратного вызова. Для этого вам потребуется использовать функцию getState(), которая позволяет добавлять логику на основе действия, выполняемого CRUD.
В этом случае мы хотим сделать поле пароля required только при добавлении строки и не требуется при обновлении.
Таким образом, в дополнение к вышеупомянутому обратному вызову update_password() вам нужно будет обернуть правила проверки формы в проверку состояния.
if( $crud->getState() == 'insert_validation' ) {
$crud->set_rules('user_password', 'Password', 'trim|required|matches[konfirmpass]');
$crud->set_rules('konfirmpass', 'Konfirmasi Password', 'trim|required');
}
Это добавит параметры проверки, если CRUD вставляется.
person
Ben Swinburne
schedule
28.11.2011