CakePHP 2.0 Router ::连接问题在url中没有可见的id

时间:2011-11-24 05:20:10

标签: cakephp url-routing router cakephp-2.0

我希望关注SEO网址:

www.example.com/users/profile/webfacer

我不想使用唯一用户从数据库中获取。

我尝试在AppController中使用路由器方法connect。但我意识到这是不可能的(或者现在不知道它也用在routes.php中也没用过)这样:

    //in AppController
Router::connect('/users/profile/:name', 
    array(
        'controller' => 'users',
        'action'     => 'profile'
    ) ,
    array(
        'pass' => array('id', 'name'),
        'id'   => '[0-9]+'
    )
);

如何使用此html链接助手重现此链接(在示例下方)以发送ID但不在网址中显示:

$this->Html->link('webfacer',array(
       'controller'=>'users',
       'action'=>'profile',
       'id'=>1,
       'name'=>'webfacer'
));

这将输出www.example.com/users/profile/username:webfacer,这意味着我的路由器不会出现在我的路线选项中。

有没有人有同样的问题并解决了这个问题?

1 个答案:

答案 0 :(得分:3)

因为你没有在你的路由字符串中放置:id参数,所以当你在帮助器中传递它时,Cake不知道该怎么做,这就是为什么它只是将它作为普通参数添加到URL。无法通过URL传递“隐藏”ID,您最好选择公开它或在应用程序的另一端写一些根据您传递的用户名获取ID的内容(确保此列是索引和网址安全的。)

我只想简化你的路线:

//in AppController
Router::connect('/users/profile/:name', 
    array(
        'controller' => 'users',
        'action'     => 'profile'
    ) ,
    array('pass' => array('name'),
    )
);

不要打扰将ID传递给助手。在您的个人资料操作中,您只需要这样的内容:

public function profile($name) {
    $user = $this->User->find('first', array('conditions' => array('name' => $name)));
}