我一直在使用带有“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吗?
任何建议表示赞赏......
答案 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%偏离我的头脑。