CakePHP反向路由问题

时间:2012-01-09 11:54:47

标签: cakephp cakephp-2.0

我一直在使用带有“slug”的路由作为命名参数,例如:

Router::connect('/category/:slug',  array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('slug'), 'slug'=>'[a-z0-9\-]+'));

我现在偶然发现了一个问题因为我想将上述路由限制为仅登录用户,所以我把它放在了CategoriesController的beforeFilter()函数中:

if(!$this->Auth->loggedIn()) {
    $this->Auth->deny('view');
}

现在,如果我进入/ category / my-category(登出时),我将被重定向到我的应用程序的登录页面,不幸的是,在我登录后,我被重定向到/ categories / view / my-category / slug :我的类别

这是由于AuthComponent.php的第317行,我们有:

$this->Session->write('Auth.redirect', Router::reverse($request));

因此,当我在上述路由上执行Router :: reverse($ request)时,它似乎无法正常工作(因为它认为“my-category”应该是传递的和命名参数)。

这是我设置此路线的方式有问题,还是CakePHP的错误?当然,Router :: reverse($ request)应该总是返回我们当前的URL吗?

任何建议表示赞赏......

1 个答案:

答案 0 :(得分:1)

我不是100%确定它是否是一个错误,但在我们发现解决方法之前,可以在类别控制器中手动设置新的loginRedirect,如下所示:

if(!$this->Auth->loggedIn()) {
    $this->Auth->deny('view');
    $this->Auth->loginRedirect = '/categories/' . $this->request->params['slug'];
}

注意,检查$this->request->params['slug']是否正确使用var,而不是100%偏离我的头脑。