2013-05-15 59 views
1

我想在登錄後重定向上一頁。我的第一個問題是什麼是最好的解決方案?Symfony 1.4 - 在獲取請求中傳遞URL

我嘗試以下解決方案。 在獲取請求中發送前一頁的網址,並重定向到獲取請求中的網址。

這是我上一頁的操作。

public function executeVotes(sfWebRequest $request) 
{ 
     $chaletId = (int) $request->getParameter('id'); 
     $this->rates = (int) $request->getParameter('rates', 0); 

     if (
      ($this->getUser()->isAuthenticated() === FALSE) 
      || ($this->getUser()->hasCredential('member_permission') === FALSE) 
     ) { 
      $this->redirect('member_signin', array(
       'redirect' => $this->getController()->genUrl('chalet_votes/' . $chaletId . '/?rates=' . $this->rates, true) 
      )); 
     } 
} 

這是我的登入動作

public function executeSignin(sfWebRequest $request) 
{ 
     $this->redirectUrl = $this->getRequest()->getParameter('redirect'); 

     echo $this->redirectUrl; die; 
} 

這是對這些行動的路由器。

member_signin: 
    url: /member/login/* 
    param: { module: member, action: signin} 

votes: 
    url: /chalet/votes/:id 
    param: { module: test, action: votes } 

這是重定向到登錄頁面後的url。

http://test.dev/member/login/redirect/http%3A%2F%2Fchalet.dev%2Fchalet_votes%2F1%2Frates%2F9 

我的服務器顯示404頁錯誤。什麼是問題?我該怎麼做?

+1

爲什麼不保存以前的URL爲'SESSION'變量? – shadyyx

回答

2

而不是將未經身份驗證的用戶重定向到member_signin。嘗試進行轉發:

$this->forward('member_signin'); 

因爲你不是重定向,當你發佈登錄表單,你將不得不在$request->getReferer()方法可參照網址。

那麼你需要在你登入動作做到:

public function executeSignin(sfWebRequest $request) 
{ 
    $user = $this->getUser(); 

    // If the user has been authenticated, helps prevent redirect loop as well. 
    if ($user->isAuthenticated()) { 
     $this->redirect('@defaultpage'); 
    } 

    // Do authentication 
    //... 

    // If authenticated 
    $this->redirect($request->getReferer()); 
} 
1

我認爲這應該工作。

$this->redirect('member_signin', array(
    'redirect' => urlencode($this->getController()->genUrl('chalet_votes/' . $chaletId . '/?rates=' . $this->rates, true)) 
)); 

請注意urlencode()。所以不要忘記在重定向之前在網址上使用urldecode()

您也可以使用會話來保存網址,但請記住在登錄後重定向後將其從會話中取消設置,以防止重定向循環。

希望這會有所幫助。