$ request-> getPathInfo()为'prod'和'dev'环境返回相同的字符串

时间:2013-02-12 12:52:22

标签: php symfony1 symfony-1.4

我正在使用$request->getPathInfo()在动作中设置当前网址。但是,检索到的url总是针对prod环境,这意味着我在测试期间无意中从开发环境转移到prod环境。

无论如何都要确保返回正确的URI(即与浏览器窗口中显示的URI相同)?

我的操作代码如下所示:

public function executeSomeAction(sfWebRequest $request)
{
    $this->url = $request->getPathInfo();
}

2 个答案:

答案 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/mainindex.php/main,您将始终获得/main

如果您想要完整路径 /main,则还必须致电$this->request->getScriptName()

请注意,getScriptName()会在域名和路径信息之间返回所有内容。如果您有http://exemple.com/somepath/app_dev.php/maingetScriptName()将返回:/somepath/app_dev.php

答案 1 :(得分:1)

如果您想要完整的URI以及地址可能包含的任何查询字符串,您可以使用

$request->getUri();

这将返回浏览器地址栏中可见的整个地址。