修改请求路径信息

时间:2015-08-28 12:39:16

标签: php yii

现在,让我猜猜你们可能在想什么......“在处理之前修改路径信息是一个坏主意。你为什么要这样做?这是恶意行为!!!”< / p>

我正在尝试获取前一个网址的controller/action代表;通过Yii::app()->getRequest()->getUrlReferrer()

From Yii 2 issues,可以为新请求设置路径信息并解析该请求。但是,从Yii 1来源,处理路径信息的唯一方法是getPathInfo()decodePathInfo()。如果有setPathInfo(),我本可以使用urlManager->parseUrl()来实现此目的。但我们不允许设置路径信息。

如何找到我之前网址的controller/action代表?

2 个答案:

答案 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。