2012-01-09 124 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%了我的頭頂部右邊變種。