我的應用程序的服務需要訪問$_SERVER
變量(是Apache提供)呼籲:$_SERVER['GEOIP_COUNTRY_CODE'];
有什麼好的方法來實現這一目標?
我目前的猜測是注入RequestStack,但另一方面我不想將完整的RequestStack耦合到此服務。
有沒有其他方法可以實現這一目標?
P.S. 請不要使用像https://github.com/aferrandini/Maxmind-GeoIp等捆綁軟件的鏈接回覆我。
我的應用程序的服務需要訪問$_SERVER
變量(是Apache提供)呼籲:$_SERVER['GEOIP_COUNTRY_CODE'];
有什麼好的方法來實現這一目標?
我目前的猜測是注入RequestStack,但另一方面我不想將完整的RequestStack耦合到此服務。
有沒有其他方法可以實現這一目標?
P.S. 請不要使用像https://github.com/aferrandini/Maxmind-GeoIp等捆綁軟件的鏈接回覆我。
你必須告訴你的服務注入請求堆棧以獲取當前請求。
您可以撥打請求服務但它可能會導致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");
}
}
陽明:
services:
your_great_service:
class: Some\GreatBundle\ServicePath\GreatService
arguments: ["@request_stack"]
也許從請求堆棧中分離服務與額外的地理IP服務類:) –
如果我理解了您,您希望在服務中使用$_SERVER
變量。我發現這個symfony的文檔中:
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
// retrieve SERVER variables
$request->server->get('HTTP_HOST');
正如我所看到的,是沒有問題的,實現你的變量:
$request->server->get('GEOIP_COUNTRY_CODE');
哪種是你的服務文件? yml或xml? –
我使用yaml作爲文件格式。 – gries