如何在cakephp中路由用户生成的路径,例如mysite.com/username1?

如何在cakephp中路由用户生成的路径,例如mysite.com/username1?,cakephp,Cakephp,我正在制作一个cakephp 2.3应用程序,有以下“页面”: 以上是固定的。生成以下内容: mysite.com/johnsmith mysite.com/cooluser88 我已使用以下内容更新了路线: Router::connect( '/*/', array('controller' => 'pages', 'action' => 'redirect') )) 我走对了吗?页面控制器中的重定向方法?我使用的是官方文件,但我还没有找到具体的例子 我会继续努力,如果我找到答

我正在制作一个cakephp 2.3应用程序,有以下“页面”:

以上是固定的。生成以下内容:

mysite.com/johnsmith
mysite.com/cooluser88
我已使用以下内容更新了路线:

Router::connect(
'/*/',
array('controller' => 'pages', 'action' => 'redirect')
))

我走对了吗?页面控制器中的重定向方法?我使用的是官方文件,但我还没有找到具体的例子


我会继续努力,如果我找到答案,我会更新

在IMO中,您最好的选择是执行类似reddit的操作,其中每个slug的前缀都是
/r/

例如:

mysite.com/u/johnsmith
然后,在您的路线中,您可以执行以下操作:

Router::connect('/u/:uname/*', array('controller'=>'users', 'action'=>'display'), 
    array('pass'=>array('uname')));
如果您真的不想这样做,可以使用以下方法:

Router::connect('/:uname/*', array('controller'=>'users', 'action'=>'display'), 
    array('pass'=>array('uname')));

但请记住,任何其他控制器、插件等都需要自己的路由,因为它会认为在
mysite.com/
之后传递的任何内容都是
uname
。在我看来,这不是最好的主意。

不完全是。路由器如何知道哪些是用户名路由,哪些不是。你可以试着把这条规则放在最后。但我仍然建议在这里使用一个更独特的名称空间。出于某种原因,我在重定向方法中考虑选择基本字符串“/*/”,并检查它是固定的还是在用户数据库中?是的,我想在固定路线之后把它放在最后。
Router::connect('/:uname/*', array('controller'=>'users', 'action'=>'display'), 
    array('pass'=>array('uname')));