2014-06-06 5 views
2
내 응용 프로그램의 서비스 호출 (아파치에서 제공)를 $_SERVER 변수에 액세스 할 필요가

서비스에 $ _SERVER 변수를 주입하는?어떻게

내 현재 추측은 RequestStack을 주입하는 것이지만 다른 한편으로는 완전한 RequestStack을이 서비스에 연결하고 싶지 않습니다.

다른 방법이 있습니까?

P. 내가 당신을 이해하는 경우 등 https://github.com/aferrandini/Maxmind-GeoIp

+0

서비스 파일 유형입니까? yml 또는 xml? –

+0

yaml을 파일 형식으로 사용하고 있습니다. – gries

답변

5

:

use Symfony\Component\HttpFoundation\Request; 

$request = Request::createFromGlobals(); 

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

내가 볼 수 있듯이, 당신의 변수를 달성하기 위해 아무 문제가 없다 현재 요청을 얻기 위해 스택을 요청하십시오.

당신은 요청 서비스를 호출 할 수 있지만 요청이 변경할 수 있기 때문에 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"] 
+0

요청 스택에서 추가 geo ip 서비스 클래스로 서비스를 분리 할 수 ​​있습니다. :) –

-2

처럼 번들에 대한 링크와 함께 내 질문에 대답하지 마십시오, 당신은 서비스에 $_SERVER 변수를 사용하고 싶습니다. 내가 심포니 문서에서 이걸 발견 : 당신은을 주입하는 서비스를 말할 필요

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

Requests and Responses in Symfony

+0

네,하지만 이것에 대한 대안이 있는지 물어보고 있으므로, 완전한 RequestStack을 서비스에 주입 할 필요가 없습니다. – gries

+0

물론, 이전의 $ _SERVER 슈퍼 글로벌을 사용할 수도 있습니다. – vobence