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

时间:2012-12-20 09:27:59

标签: cakephp cakephp-2.1

我是CakePHP的新手,但对于编程而言并不是什么新鲜事。通常我可以快速解决问题。但是我想我需要一点帮助。查看CakePHP Cookbook,它解释了很明显的路线。我唯一能挂断的是路由别名。也许我弄错了但是我的理解就像路线别名一样,它只是一个别名。因此原始路线也应该存在。它似乎并没有真正起作用。

我创建了一个用/商家捕获所有东西的路线,创建一个别名

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

它做了它应该做的事情。如果我去/商家/登录,它真的是/ users / login。如果我转到/ users / login,它会将我重定向到/ merchants / login。我确实在AppController中设置了Auth组件。如果我取出Auth,那么别名就可以了。所以我认为Auth是罪魁祸首。我想要有点过于聪明吗?有一个更好的方法吗?使用相同的控制器单独登录。

2 个答案:

答案 0 :(得分:3)

这肯定是由于反向路由。在解析链接时,您配置的路径会使Cake使用/merchants/而不是/users/

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

如果您想强制登录的特定URL不使用/merchants/,您可以为此声明更具体的路由:

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

答案 1 :(得分:0)

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

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