Как ввести переменную $SERVER в службу


Службе моего приложения необходимо получить доступ к переменной $_SERVER (которая предоставляется apache), называемой: $_SERVER['GEOIP_COUNTRY_CODE'];

Каковы хорошие способы достижения этого?

Мое текущее предположение состояло бы в том, чтобы ввести стек запросов, но, с другой стороны, я не хочу связывать полный стек запросов с этой службой.

Существуют ли другие способы достижения этого?

P.S. Пожалуйста, не отвечайте мне ссылками на пакеты, такие как https://github.com/aferrandini/Maxmind-GeoIp и т.д.

Author: DonCallisto, 2014-06-06

2 answers

Вы должны сообщить своей службе, чтобы она ввела стек запросов, чтобы получить текущий запрос.

Вы можете вызвать службу запросов , но это может привести к Исключение 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"]
 5
Author: R. Canser Yanbakan, 2014-06-06 08:55:11

Если я вас понимаю, вы хотите использовать переменную $_SERVER в службе. Я нашел это в документации Symfony:

use Symfony\Component\HttpFoundation\Request;

$request = Request::createFromGlobals();

// retrieve SERVER variables
$request->server->get('HTTP_HOST');

Как я вижу, нет никаких проблем с достижением вашей переменной:

$request->server->get('GEOIP_COUNTRY_CODE');

Запросы и ответы в Symfony

 -2
Author: vobence, 2014-06-06 07:50:02