现在,让我猜猜你们可能在想什么......“在处理之前修改路径信息是一个坏主意。你为什么要这样做?这是恶意行为!!!”< / p>
我正在尝试获取前一个网址的controller/action
代表;通过Yii::app()->getRequest()->getUrlReferrer()
。
From Yii 2 issues,可以为新请求设置路径信息并解析该请求。但是,从Yii 1来源,处理路径信息的唯一方法是getPathInfo()
和decodePathInfo()
。如果有setPathInfo()
,我本可以使用urlManager->parseUrl()
来实现此目的。但我们不允许设置路径信息。
如何找到我之前网址的controller/action
代表?
答案 0 :(得分: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);
}
另一种方式 -
$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');
它可能会帮助您解决问题。
答案 1 :(得分:0)
Yii不允许CHttpRequest
对象通过解析路由。创建应用后,无法创建新的CHttpRequest
。
我意识到解决这个问题的唯一方法是vanilla Yii::app()->controller->action
对象。从这里,我可以得到特定URL的模块,控制器和动作ID。