2010-10-27 61 views
3

我已經使用Yii::app()->user->returnUrl但它總是將我重定向到localhost/index.php。是否有任何特定的配置或代碼段,我必須寫其他程序?如果您有其他解決方案,請讓我知道。Yii框架中錯誤的返回url

回答

0

我想,你必須將其設置:

Yii::app()->user->setReturnUrl('controller/action'); 
+0

但我不清楚用戶正在訪問的當前網址。 – aslingga 2010-10-27 08:49:47

3

@aslingga,可以請你解釋一下你想用RETURNURL做什麼?你只是試圖回到你登錄後的位置,或者你是否在別的地方使用它?

這是從Yii documentation

將用戶重定向瀏覽器到 登錄頁面。在重定向之前, 當前的URL(如果它不是AJAX url)將被保留在returnUrl中,以便 用戶瀏覽器可以在 成功登錄後將 重定向回當前頁面。請確保您設置了 loginUrl,以便在調用此方法後,用戶瀏覽器可以將 重定向到指定的登錄名 URL。在 調用此方法之後,當前的 請求處理將被終止。

換句話說,如果您嘗試請求的頁面需要驗證,那麼您所在頁面的URI將存儲在會話變量中。然後,一旦你登錄,它會把你帶回到那個頁面。

我建議排除故障的一種方法是做一個print_r($_SESSION);只是爲了確保ret​​urnUrl實際上被存儲。然後,你將能夠檢查index.php是否被存儲爲returnUrl,或者你是否因爲某種原因被重定向。

查看CWebUser方法getState和setState也可能有所幫助。

+0

我想將我的語言從默認EN_US更改爲ID_ID。像這樣url => http://www.domain.com/language/change/to/id_id。所以在我改變我的語言之後,它會重定向到我的最後一頁。你有另一種解決方案嗎?讓我知道它。 – aslingga 2010-10-27 08:47:47

+0

@aslingga,回覆您對@addfs的評論。您可以通過CHttpRequest類方法之一獲取用戶所在的頁面。 http://www.yiiframework.com/doc/api/1.1/CHttpRequest#url-detail。哪些是php $ _SERVER變量的包裝器。 – 2010-10-27 17:25:02

3

我知道這個問題很老,但也許這會幫助別人,因爲我沒有找到一個體面的答案任何地方。

getReturnUrl如何工作

配置您的Yii應用程序默認返回URL需要一點點的定製。它開箱的方式是,你每次調用時指定的默認返回URL:

Yii::app()->user->getReturnUrl('site/internal'); 

的想法是,如果用戶訪問需要身份驗證的網頁時,他們會重定向到登錄頁面,但沒有運行

Yii::app()->user->setReturnUrl('site/visitedpage'); 

現在,當用戶登錄時,他們將回到他們打算去的網頁的網站之前。

雖然我喜歡該功能,但每次都必須設置默認返回URL是愚蠢的。如果您想更改默認返回網址,則必須在整個代碼中查找它。我想你可以在一個站點參數的設定值,並調用

Yii::app()->user->getReturnUrl(Yii::app()->params['defaultReturnUrl']); 

我不認爲我有必要解釋一下爲什麼該解決方案是煩人了。

我的解決方案

所以當getReturnUrl被稱爲不帶任何參數,它返回要麼「的index.php」或只是「/」。這在某些情況下很好,但並非總是如此。這是更好的海事組織。

首先,延長CWebUser類,並添加以下額外

class WebUser extends CWebUser { 
    // default return URL property 
    public defaultReturnUrl; 

    // override the getReturnUrl method 
    public function getReturnUrl($defaultUrl=NULL) { 
     if ($defaultUrl === NULL) { 
      $defaultReturnUrl = $this->defaultReturnUrl; 
     } 
     else { 
      $defaultReturnUrl = CHtml::normalizeUrl($defaultUrl); 
     } 
     return $this->getState('__returnUrl',$defaultReturnUrl); 
    } 
} 

現在,讓我們添加一些項目到用戶組件陣列。

'user' => array(
    'class' => 'WebUser', 
    'defaultReturnUrl' => 'site/internal' 
) 

這不僅允許你設置在配置默認返回URL,而且還保持設置不同的默認返回URL,並使用setReturnUrl功能的能力。