如何将 $_SERVER 变量注入服务
Posted
技术标签:
【中文标题】如何将 $_SERVER 变量注入服务【英文标题】:How to inject $_SERVER variable into a Service 【发布时间】:2014-06-06 07:33:23 【问题描述】:我的应用程序的一个服务需要访问一个名为 $_SERVER
的变量(由 apache 提供):$_SERVER['GEOIP_COUNTRY_CODE'];
有什么好的方法可以做到这一点?
我目前的猜测是注入 RequestStack,但另一方面我不想将完整的 RequestStack 耦合到此服务。
还有其他方法可以实现吗?
附: 请不要用 https://github.com/aferrandini/Maxmind-GeoIp 等捆绑包的链接回答我。
【问题讨论】:
你的服务文件是什么类型的? yml 还是 xml? 我使用 yaml 作为文件格式。 【参考方案1】:您必须告诉您的服务注入请求堆栈以获取当前请求。
您可以调用请求服务,但这可能会导致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"]
【讨论】:
也许可以将服务与请求堆栈中的额外地理 ip 服务类解耦:)【参考方案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
【讨论】:
是的,但我想问是否有替代方案,所以我不必将完整的 RequestStack 注入到服务中。 当然,你也可以使用旧的 $_SERVER superglobal。以上是关于如何将 $_SERVER 变量注入服务的主要内容,如果未能解决你的问题,请参考以下文章