如何在codeigniter中制作url /用户名?

Posted

技术标签:

【中文标题】如何在codeigniter中制作url /用户名?【英文标题】:How to make url /username in codeigniter? 【发布时间】:2013-10-20 14:55:00 【问题描述】:

我目前正在使用 codeigniter。我目前可以通过使用 /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);  



 

routes.php

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

【问题讨论】:

请添加更多信息 您能否添加更多关于要求我添加更多信息的信息?你需要知道什么? 使用用户/用户名或用户/配置文件/用户名导航到配置文件? 这就是为什么我只想使用www.mysite.com/username 而不是像user/profile/username 这样的大网址。我看过 CI 文档,它看起来像一个路由问题,但我不确定如何使用它。你知道我会如何路由它,使它成为/username 我建议发布您的 routes.php。您将需要创建一个 catch all 路由以将所有 uri 重定向到用户控制器。 【参考方案1】:

我认为您要实现的功能如下:

    如果用户导航到http://example.com/(route) 并且路由由控制器映射,则显示该控制器。 如果用户导航到http://example.com/(route) 并且路由没有被任何控制器映射,那么路由有可能是用户名,因此:
      如果路线是用户名,则显示该人的路线。 如果路由不是用户名,则显示 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 模型。如果您需要这方面的更多信息,请告诉我。

【讨论】:

+1 并且可以使用 show_404() 代替自定义方法 displayPageNotFound

以上是关于如何在codeigniter中制作url /用户名?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter URL 问题

codeigniter 4 如何制作菜单栏链接

从 URL 中删除 index.php - Codeigniter 2

根据 url 更改 CodeIgniter 控制器目录

在codeigniter中制作多站点和多语言网站的正确方法

Codeigniter + Angular Js:如何接收 JSON 数据