1
$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"/>';   
}

私の質問は、「パスワード」のみが空白でない場合に更新する方法ですか?

4

1 に答える 1

4

一見コードが正常に見えたので、テストのためにCI2.0.3とGC1.1.4をインストールしました。結局のところ、それはそうです、そしてあなたのコードは機能します。GCをemployees_management使用してコントローラーのすぐに使用できる方法を変更しました。examplesデータベースに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()フォーム検証の前に実行する場合は、への呼び出しを実行し、2つのコールバック内に検証ルールを追加する必要もあります。挿入には明らかに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が挿入されている場合に検証オプションが追加されます。

于 2011-11-28T14:19:37.010 に答える