2

現在、コードイグナイターを使用しています。私は現在、 を使用して個人のプロファイルを表示できますが、ユーザーが を使用してプロファイルに移動するだけで簡単に/user/profile/profile_idできるようにしたいと考えています。/username

どこから始めればよいかわかりません。

class User extends CI_Controller{  

public function index(){

    if($this->session->userdata('is_logged_in')){
        redirect('user/profile');
    }

}

public function profile(){

    $profile_id = $this->uri->segment(3);
    $ip = $this->session->userdata('ip_address');
    $curr_user = $this->session->userdata('id');

    $data['profile'] = $this->db->get_where('users', array('id' => $profile_id))->row_array();  
    $data['followers'] = $this->db->get_where('followers', array('following_id' => $profile_id))->num_rows();       
    $data['following'] = $this->db->get_where('followers', array('follower_id' => $profile_id))->num_rows();
    $data['doesFollow'] = $this->db->get_where('followers', array('follower_id' => $curr_user, 'following_id' => $profile_id))->num_rows();
    $data['posts'] = $this->db->get_where('posts', array('user_id' => $profile_id))->result_array();        

    $data['main_content'] = 'profile';  
    $this->load->view('template', $data);   

    $this->get_profile_view($profile_id, $ip, $curr_user);  

}

} 

ルート.php

$route['default_controller'] = "signin";
$route['404_override'] = '';
4

1 に答える 1

6

あなたが達成しようとしている機能は次のとおりだと思います。

  1. ユーザーがhttp://example.com/(route)に移動し、ルートがコントローラーによってマップされている場合は、そのコントローラーを表示します。
  2. ユーザーがhttp://example.com/(route)に移動し、ルートがコントローラーによってマップされていない場合、ルートがユーザー名である可能性があるため、次のようになります。
    1. ルートがユーザー名の場合、その人のルートを表示します。
    2. ルートがユーザー名でない場合は、404 ページを表示します。

したがって、ここでの計画は、提供されたルートがユーザー名であるかどうかを確認するカスタム 404 ハンドラーを作成することです。それ以外の場合は、404 ページを表示します。

最初に行う必要があるのは、カスタム 404 コントローラーを設定することです。

$route['404_override'] = 'profile';

次に、カスタム 404 コントローラーを作成します。

class Profile extends CI_Controller {
    public function __construct() {
            parent::__construct(); 
    }

    public function index()
    {
        $username = $this->uri_segment(1);

        if (empty($username)) {
            $this->displayPageNotFound();
        }

        $this->load->model('muser');

        // Check if parameter is not a valid username.
        if (!$this->muser->checkIfUsername($username)) {
            $this->displayPageNotFound();
        } else {
            // Load data for user profile.
            $ip = $this->session->userdata('ip_address');
            $curr_user = $this->session->userdata('id');

            $data['profile'] = $this->db->get_where('users', array('id' => $profile_id))->row_array();  
            $data['followers'] = $this->db->get_where('followers', array('following_id' => $profile_id))->num_rows();       
            $data['following'] = $this->db->get_where('followers', array('follower_id' => $profile_id))->num_rows();
            $data['doesFollow'] = $this->db->get_where('followers', array('follower_id' => $curr_user, 'following_id' => $profile_id))->num_rows();
            $data['posts'] = $this->db->get_where('posts', array('user_id' => $profile_id))->result_array();        

            $data['main_content'] = 'profile';  
            $this->load->view('template', $data);   

            $this->get_profile_view($profile_id, $ip, $curr_user);  
        }
    }

    protected function displayPageNotFound() {
        $this->output->set_status_header('404');
        $this->load->view('page_not_found');
    }
}

実装する必要があるのは、checkIfUsername() メソッドを使用した muser モデルだけです。これについてさらに情報が必要な場合はお知らせください。

于 2013-10-12T17:20:12.237 に答える