【问题标题】:Codeigniter user profile URLCodeigniter 用户配置文件 URL
【发布时间】:2012-01-08 09:14:49
【问题描述】:

我有一个名为 user 的控制器,它现在只加载用户个人资料页面

class user extends CI_Controller {

    public function __construct(){
        parent::__construct();
    }

    public function index($username = null){
        //load index page
        $this->load->view('profile/index');
    }

}

我也路由了它,所以我可以从路由中的 user/$username 加载它

//user profiles pretty url
$route['user/(:any)'] = "user/index/$1";

问题是我想更改它并允许用户直接访问他们的个人资料而不输入 user/$username 而是 $usernamd 像 mysite.com/$username...

我试过了,但它搞砸了一切。我怎样才能做到这一点?

谢谢。

【问题讨论】:

    标签: php codeigniter url profile


    【解决方案1】:

    我想实现这样的事情的唯一方法是将所有其他控制器添加到您的路由文件中。

    你可以试试这样的

    $route['controller'] = "controller";
    $route['controller/(:any)'] = "controller/$1";
    $route['(:any)'] = "user/$1";
    

    here 所述的_remap 函数结合使用。在您的用户控制器中。

    【讨论】:

    • 我能想到的最简单的方法。也许另一种方法是创建一个自定义路由器(MY_Router),检查填写的名称是控制器还是用户名,然后做出决定。
    【解决方案2】:

    你听说过_remap function吗? 如果你用这个替换 index() 函数:

    public function _remap($username = null) {
        $this->load->view('profile/index');
    }
    

    它可能会起作用。您不必使用 routes.php。

    【讨论】:

      【解决方案3】:

      我为我的用户使用了类似的东西;我的用户控制器 mysite.com/users/p/$user_id 中的这个“p”功能,路线很好,但我这样解决了,如果你不想要类似“p”的东西,你也可以做索引功能

      function p() 
      {
      $total_slashes = count ( $this->uri->segment_array () );
      $last = end ( $this->uri->segments );
      if ($total_slashes == 3) {
      $data ['userdetails'] = $this->users_model->userDetails ( $last );
      // $last is our user_id
      $this->load->view('profile/index');
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-08
        • 1970-01-01
        • 2016-10-25
        • 2014-01-13
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多