3

私の見解では、ユーザーが正常に登録されたら、フォーム フィールドをクリアしたいと考えています。ここですべてが正常に機能します。つまり、ユーザーが登録され、成功メッセージがユーザーに表示されますが、私がやりたいことは、これを使用しているフォームフィールドの値をクリアすることです

// Clear the form validation field data, so that it doesn't show up in the forms
$this->form_validation->_field_data = array();

これを追加した後、CI は次のエラーを出し続けます: Fatal error: Cannot access protected property CI_Form_validation::$_field_data in

C:\wamp\www\CodeIgniter\application\controllers\user.php 行 92

関連するコントローラーコードは次のとおりです。

public function signup()
{
    // If the user is logged in, don't allow him to view this page.
    if (($this->_isLoggedIn()) === true) {
        $this->dashboard();
    }
    else
    {
        $data['page']       = 'signup';
        $data['heading']    = 'Register yourself';
        $data['message']    = $this->_regmsg;

        $this->load->library('form_validation');

        // $this->form_validation->set_rules('is_unique', 'Sorry! This %s has already been taken. Please chose a different one.');

        $this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[users.username]|callback_valid_username');
        $this->form_validation->set_rules('password', 'Password', 'required|matches[passconf]');
        $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
        $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');

        // run will return true if and only if we have applied some rule all the rules and all of them are satisfied
        if ($this->form_validation->run() == false) {

             $data['errors'] = isset($_POST['submit']) ? true : false;
            $data['success'] = false;

            $this->_load_signup_page($data);
        }
        else{
            if($this->users->register_user($_POST)){
                 $data['errors'] = false;
                $data['success'] = true;

                // Clear the form validation field data, so that it doesn't show up in the forms
                $this->form_validation->_field_data = array();

                $this->_load_signup_page($data);
            }
        }
    }
}

private _load_signup_page($data){
    $this->load->view('template/main_template_head');
    $this->load->view('template/blue_unit', $data);
    $this->load->view('signup', $data);
    $this->load->view('template/main_template_foot');
}

この行がどうなっているのか誰か教えてください。

$this->form_validation->_field_data = array();

PS:フォームに値を表示する方法は次のとおりです。

<?php echo set_value('fieldname'); ?>
4

1 に答える 1

4

これは保護されたプロパティであり、直接使用できないことを意味します。これの代わりに、このように簡単に行うことができます

if($this->users->register_user($_POST)){
    $data['errors'] = false;
    $data['success'] = true;

    unset($_POST)

    $this->_load_signup_page($data);
}

この方法はお勧めしません。代わりに、同じコントローラーにリダイレクトすると、フォームは自動的にリセットされます。

if($this->users->register_user($_POST)){
    $data['errors'] = false;
    $data['success'] = true;

    redirect('controllername/signup');
}

それでも成功メッセージが必要な場合は、これにフラッシュ データを使用できます。ここ

于 2013-10-14T07:14:25.287 に答える