如何将$ _SERVER变量注入服务

时间:2014-06-06 07:33:24

标签: php symfony geoip

我的应用程序的服务需要访问名为$_SERVER

$_SERVER['GEOIP_COUNTRY_CODE'];变量(由apache提供)

实现这一目标的好方法是什么?

我目前的猜测是注入RequestStack但另一方面我不想将完整的RequestStack耦合到这项服务。

还有其他方法可以实现这一目标吗?

P.S。 请不要回复我的https://github.com/aferrandini/Maxmind-GeoIp等捆绑包的链接。

2 个答案:

答案 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');

Requests and Responses in Symfony