Cakephp 将别名和两个URL路由到一个控制器?

Cakephp 将别名和两个URL路由到一个控制器?,cakephp,cakephp-2.1,Cakephp,Cakephp 2.1,我对CakePHP相当陌生,但对编程来说并不陌生。通常我能很快把事情弄清楚。不过我想我需要一点帮助。查看CakePHP食谱,它对路线的解释非常清楚。我唯一挂断的是路线别名。也许我弄错了,但我对别名的理解是,它只是一个别名。因此,原始路线也应该存在。这似乎不是真的那样 我创建了一条路线,通过/merchants捕获所有内容,并创建了一个别名 Router::connect('/merchants/:action/*', array('controller' => 'users')); 它做

我对CakePHP相当陌生,但对编程来说并不陌生。通常我能很快把事情弄清楚。不过我想我需要一点帮助。查看CakePHP食谱,它对路线的解释非常清楚。我唯一挂断的是路线别名。也许我弄错了,但我对别名的理解是,它只是一个别名。因此,原始路线也应该存在。这似乎不是真的那样

我创建了一条路线,通过/merchants捕获所有内容,并创建了一个别名

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

它做它应该做的事。如果我转到/merchants/login,它实际上是/users/login。如果我转到/users/login,它会将我重定向到/merchants/login。我确实在AppController中设置了Auth组件。如果我去掉Auth,那么别名将正常工作。所以我认为Auth是罪魁祸首。我是不是太聪明了一点?有更好的方法吗?使用同一控制器分别登录。

这当然是由于反向路由。解析链接时,您配置的路由使Cake使用
/merchants/
而不是
/users/

登录操作是
/users/login
。因此,当Cake将用户重定向到登录url时,登录url中的
/users/
也会被
/merchants/
替换

如果您想强制使用不使用
/merchants/
的登录名的特定URL,您可以为其声明一个更具体的路由,如下所示:

Router::connect('/login',   array('controller' => 'users', 'action' => 'login'));
Router::connect('/merchants/:action/*', array('controller' => 'users'));

听起来好像您的ACL或Auth设置中不允许使用
/users/login
。当您访问
/users/login
时,Auth会看到您没有访问权限,因此会重定向到您
Auth::$loginAction
(您没有发布,但我假设它是
/merchants/login
,基于行为)

确保
Auth::$loginAction
设置为用户控制器登录操作,而不是商家路线。这样,当需要检查访问权限时,Auth知道该操作是允许的,因为登录操作在默认情况下是允许的