【问题标题】:CakePHP routing help/questionCakePHP 路由帮助/问题
【发布时间】:2011-05-09 00:42:28
【问题描述】:

我有一个使用 CakePHP 的简单用户系统,您可以像 /users/view/11 这样查看配置文件,其中 11 是 ID。我想做的是改变它,让它使用用户名,这样你就会得到一个像/users/view/cameron这样的网址。

我知道我可以在控制器中更改它,也可以在操作链接的视图中更改它但我想知道是否可以在路由中更改它以便它会自动更改它,或者我仍然需要更改控制器中的方法等?

例子会很棒。谢谢

基于以下答案的代码:

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'));
}

但标题不起作用?

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    很遗憾,您无法创建自动执行此操作的路由规则。您应该更改 view() 函数以接受用户名作为参数,然后按用户名执行查找。即:

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

    【讨论】:

    • :/ 那么路由提供什么?
    • 通过更改一行代码和创建命名参数(即:/search:test/filter:score/)等功能,可以随时在站点范围内重新映射 url。
    • 这些参数对我的用户名计划有何帮助?
    • 另请参阅 OP,因为我已根据您的代码修改了代码但破坏了标题?
    【解决方案2】:

    路由不能以这种方式工作,因此您必须手动编辑每个视图中的链接。或者您可以只使用传递的 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');
        }
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2012-11-28
      • 1970-01-01
      • 2013-03-22
      相关资源
      最近更新 更多