2012-01-09 127 views
1

我一直在使用与“弹头”作为路由命名参数,例如:CakePHP的反向路由问题

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'); 
} 

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

这是由于线路AuthComponent.php,在那里我们有317:

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

如此看来,当我上面的路线上做路由器::反向($请求),它不能正常工作(因为它认为“我的类别”应该是一个通过参数和一个命名参数)。

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

任何意见赞赏...

回答

1

我不是100%肯定,如果它是一个错误或没有,但直到我们找到了一个变通可能是手动设置新loginRedirect在类别控制器像这样:

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

注意,检查$this->request->params['slug']是使用,而不是100%了我的头顶部右边变种。