2012-11-15 106 views
3

如何獲取codeigniter中所有聲明的路由?像前一樣。因爲這是問題,如果客戶將他的用戶名註冊爲'臉譜',他將被路由到account/facebook_login而不是他的個人資料,如果我改變了路線的順序,所有的鏈接將會被路由到客戶/配置文件,這是一個不行!codeigniter獲取所有聲明的路由

所以基本上,而不是列出所有我聲明的路線,並將其放入另一個數組或數據庫表,我想循環到路由數組,並檢查是否有一個單詞已被聲明,以便我可以阻止他們將這個詞註冊爲他們的用戶名。

這是我的樣品路線:

// 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'; 

回答

13

從控制器,你可以做到這一點

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

它會顯示在routes.php文件中定義的所有路由。

+0

的感謝!這解決了我的問題(弓) –

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; 

所以基本上它會修改笨核心流程是核心處理之前的服務器請求。

現在,問題可能是,當用戶註冊了一個與您的控制器相同的用戶名時,肯定不會被處理,因爲它被修改爲在costumer/profile/blahblah上進行路由。所有你需要做的是創建一個自定義驗證來檢查用戶名已經存在於數據庫和/或你的控制器名稱的天氣。

你可以這樣做

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