我的应用程序的服务需要访问名为$_SERVER
$_SERVER['GEOIP_COUNTRY_CODE'];
变量(由apache提供)
实现这一目标的好方法是什么?
我目前的猜测是注入RequestStack但另一方面我不想将完整的RequestStack耦合到这项服务。
还有其他方法可以实现这一目标吗?
P.S。 请不要回复我的https://github.com/aferrandini/Maxmind-GeoIp等捆绑包的链接。
答案 0 :(得分:5)
您必须告诉您的服务注入请求堆栈以获取当前请求。
您可以调用请求服务,但这可能会导致 ScopeWideningInjectionException 异常,因为请求可能会发生变化。
您的服务文件:
<?php
namespace Some\GreatBundle\ServicePath;
use Symfony\Component\HttpFoundation\RequestStack;
class GreatService
{
private $request;
public function __construct(RequestStack $requestStack)
{
$this->request = $requestStack->getCurrentRequest();
}
public function getGeoIpCountryCode()
{
return $this->request->server->get("GEOIP_COUNTRY_CODE");
}
}
YML:
services:
your_great_service:
class: Some\GreatBundle\ServicePath\GreatService
arguments: ["@request_stack"]
答案 1 :(得分:-2)
如果我理解你,你想在服务中使用$_SERVER
变量。我在Symfony文档中找到了这个:
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
// retrieve SERVER variables
$request->server->get('HTTP_HOST');
正如我所看到的,实现变量没有问题:
$request->server->get('GEOIP_COUNTRY_CODE');