如何动态创建codeigniter路由?

时间:2014-05-20 04:42:23

标签: php codeigniter routes url-routing

我有一个CI routes.php ,如下所示。

$route['default_controller'] = "site";
$route['404_override'] = 'site';
$route['admin'] = 'admin';
$route[':any'] = 'site/user';

所需要的是当任何用户名(我将使用数据库检查)使用类似 - localhost/CIproj/username的URL键入时,它应该转到site/user控制器。

如果' - localhost/CIproj/admin之类的网址中有'admin',它将转到admin控制器(索引函数)。网址将更改为localhost/CIproj/admin/dashboard

所以我得到的错误是当我去localhost/CIproj/admin时,我得到了登录屏幕。但登录后,它将转到admin/dashboard。这是我被重定向到site/user的地方。

然后我尝试了下面的一个。

$route['user/(:any)'] = 'site/user';

现在一切正常。但是网址就像 - localhost/CIproj/user/username

所以问题是,有没有办法我不必在URL中写user。访问者可以在URL中键入任何内容。

 localhost/CIproj/anything

如果anything== username from database它将转到site/user

如果anything== admin or any of its page它将转到相应的控制器。

或者 404pagenotfound.php

注意:Admin是一个包含许多控制器的庞大模块。所以我认为我不应该在这里为每个管理控制器编写路由。

3 个答案:

答案 0 :(得分:2)

对于网站用户,您可以使用以下内容:

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

在这里,您将获得$ 1作为用户名的参数,您的网址将如下所示:

localhost/CIproj/anything

答案 1 :(得分:1)

只是坐在空白处。再次通过问题,找到了解决方案。 所以问题是,有什么方法我不必在URL中写用户。访问者可以在URL中输入任何内容。

本地主机/ CIproj /任何

如果anything== username from database它将转到site/user

如果anything== admin or any of its page它将转到相应的管理员控制器。

或者404pagenotfound.php

route.php将是这样的 - >

$route['default_controller'] = "site";  // controller - site / method - index (404 page).  
$route['404_override'] = 'site';  // same as above
$route['(iam:any)'] = 'site/user/$1'; // appending 'iam' to anything user enters. then in 'site' controller and 'user' method I will remove 'iam' from the segment and then check with database username. if found it will proceed to respective user page or else 404 page. 

答案 2 :(得分:0)

这是我加载路线https://github.com/EllisLab/CodeIgniter/wiki/Dreamhost-.htaccess

的方式
$route['step_1'] = "install/step_1/index";
$route['step_2'] = "install/step_2/index";
$route['step_3'] = "install/step_3/index";
$route['step_4'] = "install/step_4/index";