codeigniter获取所有声明的路由

时间:2012-11-15 03:19:34

标签: php codeigniter routes

如何在codeigniter中获取所有声明的路由?像前。的print_r($路线)

因为这是问题,如果客户将其用户名注册为“facebook”,他将被路由到帐户/ facebook_login而不是他的个人资料,如果我更改了路线的顺序,所有链接将被路由到客户/个人资料这不是不行!

所以基本上,我没有列出我声明的所有路由并将其放入另一个数组或数据库表中,而是想循环到路由数组并检查是否有已经声明的单词以便我可以停止他们将该单词注册为他们的用户名。

这是我的样本路线:

// Account routes
$route['login'] = 'account/login';
$route['logout'] = 'account/logout';
$route['register'] = 'account/register';
$route['facebook'] = 'account/facebook_login';
$route['twitter'] = 'account/twitter_login';
$route['settings'] = 'account/settings';

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

// Dynamic routes
$route['(:any)'] = 'customer/profile/$1';

2 个答案:

答案 0 :(得分:17)

从Controller可以做到这一点

print_r($this->router->routes);

它将显示在routes.php中定义的所有路由。

答案 1 :(得分:1)

首先,我很抱歉我的英语,因为“我不是学校”。 我没有得到你想要指出的东西。也许你想和这个http://www.hirepinoy.com/born2code做类似的事情。 但根据我使用CodeIgniter的经验,在您的路线中声明$route['(:any)'] = 'customer/profile/$1';是个坏主意。

我认为您可以做的最佳选择是创建一个类来检查用户表中是否存在用户名,方法是使用HOOK,请参阅http://codeigniter.com/user_guide/general/hooks.html。 因此,当返回用户名(唯一字段)时,您可以将$_SERVER['REQUEST_URI']修改为此类

$_SERVER['REQUEST_URI'] = '/customer/profile/'.$username;

所以基本上它会在codeigniter核心处理它的核心处理之前修改SERVER REQUEST。

现在,问题可能是,当用户注册了与您的控制器相同的用户名时,肯定不会进行处理,因为它被修改为在costumer/profile/blahblah上路由。您需要做的就是创建一个自定义验证来检查数据库和控制器名称上已存在用户名的天气。

你可以这样做

if (file_exists(APPPATH."controllers/{$value}.php")) {
    $this->CI->form_validation->set_message('is_unique', 'Username is already taken');  
    return FALSE;
}