如何获取Symfony2控制器中的用户IP地址?
我需要在表单提交后将注释用户的IP地址存储在数据库中。
是否有任何symfony2函数来获得IP? 或者任何其他方式来获得IP?
您可以使用Request服务获取客户端IP:
$this->container->get('request')->getClientIp();  在Symfony 2.3之前 $this->container->get('request')->getClientIp()只能在主请求控制器内部工作。 在子请求控制器中总是返回127.0.0.1 。 如果您的项目使用Symfony 2.2的子请求,那么防弹解决scheme就是创buildkernel.request侦听器,并将主请求中的IP保存在其中。 
 在Symfony 2.3中,这是固定的,因此对于内部子请求,将真实IP推送到代理列表,请参阅https://github.com/symfony/symfony/commit/2f3b33a630727cbc9cf21262817240a72a8dae0c因此,您需要将;127.0.0.1添加到trusted_proxiesconfiguration参数从Symfony 2.3+的子请求中的Request中获取客户端IP,但是出于安全原因,您不应该在共享主机上执行此操作。 
 此外,如果在Symfony 2.3.20之前使用了内置HTTPcaching( web/app.php AppCache ),则必须明确地将127.0.0.1添加到trusted_proxies 。 这个caching尝试看起来像一个真正的反向代理,并修改主请求的一些头。 在https://github.com/symfony/symfony/commit/902efb8a84e8f0acf6a63e09afa08e3dcdd80fb9中修复; 
 由于Symfony 2.4和3.x ,访问当前请求的首选方法是使用request_stack服务 
 $this->container->get('request_stack')->getCurrentRequest()->getClientIp(); 
或将Request注入控制器,请参阅http://symfony.com/doc/current/book/controller.html#the-request-as-a-controller-argument
 public function indexAction(Request $request) { $ip = $request->getClientIp(); } 
但是,在子请求中使用时排除127.0.0.1的问题仍然适用,但是现在您可以尝试使用主请求
 $this->container->get('request_stack')->getMasterRequest()->getClientIp(); 
  FYI,截至Symfony 2.0    Request::getClientIp $proxy 参数已被弃用 。 它将在Symfony 2.3中被删除 。 
你可以使用
 $container->get('request')->server->get("REMOTE_ADDR"); 
或作为@meze的答案
 $container->get('request')->getClientIp(); 
对于Symfony 2.6+,请使用以下代码(在您的控制器中:
  $this->container->get('request_stack')->getCurrentRequest()->getClientIp(); 
还有另一种将当前客户端IP注入到任何服务或方法调用中的方法:
 acme.currentIP: class: some\service\className arguments: - "@=service('request_stack').getCurrentRequest().getClientIp()" 
您可以使用以下内容:
 $request->server->get('REMOTE_ADDR'); 
$ request是类请求的对象http://api.symfony.com/2.8/Symfony/Component/HttpFoundation/Request.html