2011-05-09 126 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'); 
    } 
} 

希望这会有所帮助。