CodeIgniter动态URI路由可能吗?

pep*_*epe 2 php routing uri codeigniter

我的应用程序旨在为每个用户提供单个配置文件页面,第3个段是用户的ID.

example.com/profile/page/1
Run Code Online (Sandbox Code Playgroud)

假设用户1是"Jon Jovi",使用CI的路由我想生成这个URI

example.com/jon_jovi
Run Code Online (Sandbox Code Playgroud)

是否可以发送此用户的ID config/routes.php,运行一个函数从数据库中提取用户1的信息并插入它

$route['profile/page/$row->id'] = $row->first_name . '_' . $row->last_name;
Run Code Online (Sandbox Code Playgroud)

任何有关如何做到这一点的想法或建议都非常感谢 - 谢谢.

Fem*_*emi 5

不确定这config/routes.php根本就在你的身上:你为什么不创建一个取名字并进行查找的控制器?

编辑:我把它拿回来.这实际上有点痛苦,特别是因为你希望它生活在域的根目录上(即它很容易做到example.com/p/{username},但是example.com/{username}是凌乱的).

最简单的方法是使用CodeIgniter 2.0 +覆盖404处理程序和_remap函数的能力.首先,在config/routes.php文件中执行此操作:

$route['404_override'] = 'notfound';
Run Code Online (Sandbox Code Playgroud)

然后创建控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

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

  public function _remap($method)
  {
    if($this->uri->total_segments() == 1){
      // try it out
      $this->profile();
    }else{
      show_404($this->uri->uri_string());
    }
  }

  function profile()
  {
    echo "Showing profile for [" . $this->uri->segment(1) . "]";
  }
}
Run Code Online (Sandbox Code Playgroud)

您必须实现404页面的视图,因为这会覆盖它,但是任何未映射到现有控制器的请求都会在此处进行,您可以根据需要调度它们,包括将名称转换为数据库ID.

如果这对您有用,请告诉我.