2011-05-09 132 views
0

我有一個簡單的用戶系統,使用CakePHP並查看配置文件,如/users/view/11,其中11是ID。我想要做的是改變它,所以它使用用戶名,所以你會得到像/users/view/cameron的網址。CakePHP路由幫助/問題

我知道我可以改變這在控制器中,也在視圖中的行動鏈接,但我想知道是否有可能改變它的路由,所以它會改變它自動或我仍然需要改變控制器中的方法等?

例子會很棒。由於

CODE基於以下答案:

function view ($username = null) 
{ 
    $this->layout = 'page'; 

    $this->set('users', $this->User->findByUsername($username)); 

    $this->set('title_for_layout', $this->User->field('firstname') . ' ' . $this->User->field('lastname')); 
} 

但標題不起作用?

回答

2

您不幸地無法創建自動執行此操作的路由規則。您應該更改view()函數以接受用戶名作爲參數,然後通過用戶名執行查找。即:

function view($username = null) { 
    $this->set('user', $this->User->findByUsername($username)); 
} 
+0

:/那麼路由優惠呢? – Cameron 2011-05-09 01:43:38

+0

通過更改一行代碼以及創建命名參數(例如:/ search:test/filter:score /)等功能,可以隨時在整個站點重新映射URL。 – Tyler 2011-05-09 01:46:10

+0

這些參數如何幫助我使用我的用戶名計劃? – Cameron 2011-05-09 01:54:08

0

路由不會這樣工作,所以您必須手動編輯每個視圖中的鏈接。或者,您可以使用傳遞的ID來搜索用戶記錄。

如果$ this-> User-> id被設置,$ this-> User-> field函數不帶參數。你可能想這樣做:

function view ($username = null) 
{ 
    $this->layout = 'page'; 
    $users = $this->User->findByUsername($username); 
    if(sizeof($users)) 
    { 
     $this->set('users', $users); 
     $this->set('title_for_layout', $users[0]['User']['firstname'] . ' ' . $users[0]['User']['lastname']); 
    } 
    else 
    { 
     $this->Session->setFlash('Invalid username'); 
    } 
} 

希望這會有所幫助。