10

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

因为这是问题所在,如果客户将他的用户名注册为“facebook”,他将被路由到 account/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';
4

2 回答 2

24

从控制器你可以做到这一点

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

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

于 2012-11-15T03:39:47.897 回答
2

首先,我为我的英语感到抱歉,因为“我不是学校”。我没有得到太多你想要指出的东西。也许你想用这个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,它是核心处理。

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

你可以这样做

if (file_exists(APPPATH."controllers/{$value}.php")) {
    $this->CI->form_validation->set_message('is_unique', 'Username is already taken');  
    return FALSE;
}
于 2012-11-15T03:53:40.943 回答