如何路由codeigniter路由以访问用户,如Facebook(www.facebook.com/username)

时间:2013-04-02 12:31:26

标签: php codeigniter codeigniter-routing

我使用的是codeigniter框架,默认情况下我加载了我的网站控制器

$route['default_controller'] = "site";

但是现在我想设置routes.php配置,所以我仍然可以像以前一样访问我的控制器,但如果控制器存在,那么我想运行用户控制器并检查它是否是昵称所以我可以显示该用户个人资料。

类似于Facebook,您可以www.facebook.com/username,它会将您带到您的用户个人资料中。但我希望我的其他控制器仍可访问www.mysite.com/sitewww.mysite.com/site/function

我尝试过:任何通配符但无法使其正常工作。我已经看到有些解决了正则表达式的问题,但我不擅长正则表达式并且不知道如何将它放在一起所以它对我有用。

2 个答案:

答案 0 :(得分:2)

试试我的方式:

首先,为您拥有的每个控制器设置$route,exmp:

$route['controller_1'] = 'controller_1';
$route['controller_1/(:any)'] = 'controller_1/$1'; //this let you access your method
$route['controller_2'] = 'controller_2';
$route['controller_2/(:any)'] = 'controller_2/$1'; //this let you access your method

接下来,使用:any

$route['(:any)'] = 'user_controller/$1';
祝你好运!!!

答案 1 :(得分:0)

试试这种方式。如果你有很多控制器,它会减少很多重复行,但我不知道它是否违反任何CI规则。

//this code block should be placed after any kind of reserved routes config
$url_parts = explode('/',strtolower( $_SERVER['REQUEST_URI']) );
$reserved_routes = array("controller_1", "controller_2", "controller_3" );
if (!in_array($url_parts[1], $reserved_routes)) {    
    $route['([a-zA-Z0-9_-]+)'] = "controller_1/profile/$1";
}