2015-08-28 98 views
0

現在,讓我猜你們可能在想什麼......「在處理路徑信息之前修改路徑信息是一個壞主意,爲什麼你會想要這樣做?這是惡意行爲! !!」修改請求路徑信息

我想要獲取我以前的URL的controller/action表示形式;通過Yii::app()->getRequest()->getUrlReferrer()獲得。

From Yii 2 issues,可以設置新請求的路徑信息並解析該請求。然而,從Yii 1來源,處理路徑信息的唯一方法是getPathInfo()decodePathInfo()。如果有setPathInfo(),我可以使用它和urlManager->parseUrl()來實現這一點。但我們不允許設置路徑信息。

如何才能到達我以前的URL的controller/action表示形式?

+0

我有點混淆......所以你想要什麼......需要以前的URL'控制器/行動'信息? –

+0

這是正確的 – iGbanam

回答

0

Yii不允許CHttpRequest對象通過路由解析。在創建應用程序後創建新的CHttpRequest是不可能的。

我意識到唯一的方法去做這件事是香草Yii::app()->controller->action對象。從這裏,我可以獲得特定URL的模塊,控制器和動作ID。

0

使用PHP $_SERVER['HTTP_REFERER']這是找到以前的位置的好方法,但會給你不完整的網址。

您可以嘗試在Yii中1.0這樣 -

如果您的網址一樣 - www.domain.com?r=site/page

if(isset($_REQUEST['r']) && !empty($_REQUEST['r'])){ 
    $previous_location = $_REQUEST['r']; 
    Yii::app()->user->setState('previous_location', $previous_location); 
} 

另一個way-

$controller_name = Yii::app()->controller->id; 
$action_name = Yii::app()->controller->action->id; 

Yii::app()->user->setState('previous_location', $controller_name.'/'.$action_name); 

這樣你就可以找到你以前的位置 -

echo Yii::app()->user->getState('previous_location'); 

這可能有助於您解決問題。

+0

我可以使用'Yii :: app() - > request-> urlReferrer'獲取上一頁。但我需要解析這個URL來獲得它的控制器和操作。例如,如果'urlReferrer'是example.com/admin/posts/view/id/1,我應該得到某種數組,例如'array('module'=>'admin','controller'= >'posts','action'=>'view')' – iGbanam