Symfony中有简单的方法获取ServerName吗?

27

我一直在寻找一种简单的方式来获取Symfony运行的机器的ServerName(以便当应用在具有不同ServerName的主机上时进行适应),但我找不到这样的方法。我在app.yml中创建了一个变量并提取它,但我仍然想知道是否有更简单的方法。

你是如何做到的?我在不同的项目中使用Symfony 1.2和1.4。


2
你不能使用gethostname()吗?http://php.net/manual/en/function.gethostname.php - mamoo
抱歉,实际上我不需要主机名,而是需要ServerName(我已经编辑了我的帖子)。 - greg0ire
3个回答

60

我觉得我找到了一些东西:

$this->getRequest()->getHost()

这似乎可行... 当然,它只在有请求时才能工作,因此它不是通用的。所以,在使用CLI时,它无法工作。


2
一位同事告诉我我们不应该依赖这个,因为存在很多风险。他认为YML文件中的设置是最好的解决方案... - greg0ire
1
请问您能详细说明一下风险吗? :-) - Flukey
7
有至少两种情况下,您不希望依赖这样的系统:
  • 当您未使用Apache时(例如通过cronjob发送邮件时)
  • 当您有多台服务器但只想使用其中一台来推广您的网站时。
- greg0ire

2

虽然不太好,但我在我的前端控制器文件中使用$_SERVER["SERVER_NAME"],并使用它来确定我正在激活的环境:

$env = "prod";
if (preg_match("/qahost\.tld$/", $_SERVER["SERVER_NAME"]))
{
  $env = "qa";
}
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $env, false);
sfContext::createInstance($configuration)->dispatch();

我很想看到正确的方法 :-)


0
我希望在控制器中也能实现相同的功能。以下方法可行。
public function login(Request $request): void
{
        $redirectUri = sprintf(
            '%s://%s%s',
            $request->getScheme(),
            $request->getHost(),
            $this->generateUrl('save-token'),
        );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接