Codeigniter Grocery Crud обновить поле? - PullRequest
1 голос
/ 15 ноября 2011
$crud->set_rules('user_password', 'Password', 'trim|required|matches[konfirmpass]');
$crud->set_rules('konfirmpass', 'Konfirmasi Password', 'trim|required');

$crud->callback_edit_field('user_password',array($this,'_user_edit'));
$crud->callback_add_field('user_password',array($this,'_user_edit'));

функция обратного вызова:

function _user_edit(){
    return '<input type="password" name="user_password"/>  Confirmation password* : <input type="password" name="konfirmpass"/>';   
}

Мой вопрос, как обновить, если только "пароль" не пуст?

1 Ответ

4 голосов
/ 28 ноября 2011

Я установил 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."

Возможно, если это не работает для вас, вы должны опубликовать весь ваш метод, а не только правила и обратные вызовы, такмы можем видеть, есть ли какие-либо другие проблемы.

Working

Редактировать

Редактировать поле, только если пароль был отредактированвам нужно добавить

$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 вставляет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...