我正在使用$request->getPathInfo()
在动作中设置当前网址。但是,检索到的url总是针对prod环境,这意味着我在测试期间无意中从开发环境转移到prod环境。
无论如何都要确保返回正确的URI(即与浏览器窗口中显示的URI相同)?
我的操作代码如下所示:
public function executeSomeAction(sfWebRequest $request)
{
$this->url = $request->getPathInfo();
}
答案 0 :(得分:2)
正如您在sfWebRequest.class.php
内看到的那样,getPathInfo()
从网址中删除了$relativeUrlRoot
:
$pathInfo = $pathArray[$sf_path_info_key];
if ($relativeUrlRoot = $this->getRelativeUrlRoot())
{
$pathInfo = preg_replace('/^'.str_replace('/', '\\/', $relativeUrlRoot).'\//', '', $pathInfo);
}
$relativeUrlRoot
来自此函数,用于从网址中删除控制器名称。
public function getRelativeUrlRoot()
{
if (null === $this->relativeUrlRoot)
{
if (!($this->relativeUrlRoot = $this->getOption('relative_url_root')))
{
$this->relativeUrlRoot = preg_replace('#/[^/]+\.php5?$#', '', $this->getScriptName());
}
}
return $this->relativeUrlRoot;
}
因此,如果您有myapp_dev.php/main
或index.php/main
,您将始终获得/main
。
如果您想要完整路径 /main
,则还必须致电$this->request->getScriptName()
。
请注意,getScriptName()
会在域名和路径信息之间返回所有内容。如果您有http://exemple.com/somepath/app_dev.php/main
,getScriptName()
将返回:/somepath/app_dev.php
。
答案 1 :(得分:1)
如果您想要完整的URI以及地址可能包含的任何查询字符串,您可以使用
$request->getUri();
这将返回浏览器地址栏中可见的整个地址。