0

現在、URI に問題があります

例 - users/add という関数addがあります。入力フォームにエラーがある場合、users/add ページにエラーが表示されますが、問題がなければ users ページに戻って成功を示しますが、uri は残ります / users/add ユーザー ページに再度移動する必要があります。

アップデート:

追加:

 $data['message'] = '<div class="alert alert-success"><strong>Thank You</strong> Your User Has Been Added</div>';
   $this->session->set_userdata('message', $data['message']);
   redirect(site_url('dashboard/users'));

ユーザー:

$message = $this->session->userdata('message');

        if($message === FALSE)
        {
            $message='';
        }else{
            $this->session->unset_userdata('message');
        }

オリジナル:

コントローラ:

public function add()
        {
            $this->form_validation->set_rules('userFirstName','First Name', 'required|trim|max_length[99]|xss_clean');
            $this->form_validation->set_rules('userLastName','Last Name', 'required|trim|max_length[99]|xss_clean');
    $this->form_validation->set_rules('userEmail','E-Mail', 'required|valid_email|trim|max_length[99]|xss_clean|is_unique[users.email]');
            $this->form_validation->set_rules('userPassword','Password', 'required|trim|max_length[99]|xss_clean');

            if($this->form_validation->run() === TRUE)
                {
                    $userData = array(
                        'fName' => $this->input->post('userFirstName', TRUE),
                        'lName' => $this->input->post('userLastName', TRUE),
                        'email' => $this->input->post('userEmail', TRUE),
                        'password' => sha1($this->input->post('userPassword', TRUE))
                    );  

                    $this->db->escape($userData);
                    $this->user_model->addUser($userData);

                    $data['contentMangement'] = $this->options_model->systemOptions();
                    $data['pageTitle'] = 'Add User';
                    $data['message'] = '<div class="alert alert-success"><strong>Thank You</strong> Your User Has Been Added</div>';
                    $this->load->view('_assets/dashHeader', $data);
                    $this->load->view('dashboard/users', $data);
                    $this->load->view('_assets/footer');

                }elseif($this->form_validation->run() === FALSE)
                {
                    $data['contentMangement'] = $this->options_model->systemOptions();
                    $data['pageTitle'] = 'Add User';
                    $data['message'] = validation_errors('<div class="alert alert-error">', '</div>'); 
                    $this->load->view('_assets/dashHeader', $data);
                    $this->load->view('dashboard/addUser', $data);
                    $this->load->view('_assets/footer');
                }
        }
4

1 に答える 1

4

これは、現在のページからリダイレクトしていないために発生します。から「ユーザー」ビューをロードしているだけですusers/add

このように考えてください: あなたがいるページは ですusers/add。このページに表示されるコンテンツは、ロードするビューによって決まります。したがって、userビューを読み込んでも、まだ page にいますusers/add

リダイレクトしたい場合は、代わりに

$this->load->view('dashboard/users',$data);

あなたがする必要があります

redirect(site_url('users')); //or whatever your controller is called

ただし、後者の場合、ビューをロードするときのようにデータを渡すことはできません。リダイレクト後にデータを保持したい場合は、セッションに保存する必要があります。

したがって、上記のコードで $data['message'] を作成する場所で、それをセッションに追加します。

$this->session->set_userdata('message',$data['message']);

リダイレクトするときは、他のコントローラーでメッセージを取得し、セッションから削除します。

$message = $this->session->userdata('message');

if ($message === FALSE) {
   // message was not present in session
   $message = '';
} else {
    $this->session->unset_userdata('message');
}

編集

編集では、usersコントローラーで、セッションからメッセージを抽出しています。ただし、ビューでは使用できません。あなたはまだそれを渡す必要があります。

$message = $this->session->userdata('message');

if($message === FALSE)
{
    $message='';
} else {
    $this->session->unset_userdata('message');
}

//at this point, message is only available to the controller
// lets send it to the view

$data['message'] = $message;
$this->load->view('yourView',$data);
于 2012-06-14T05:35:14.633 に答える