gpt4 book ai didi

php - Symfony 2 : Set a parameter globally based on Request

转载 作者:行者123 更新时间:2023-12-04 05:12:19 31 4
gpt4 key购买 nike

我将尝试在这里非常具体。

我正在使用 BazingaGeocoderBundle Geocoder-php 的集成库到 Symfony2。
在 config.yml 中,您可以使用其参数设置地理位置提供程序

config.yml

bazinga_geocoder:
providers:
google_maps:
locale: en
region: US

我还有一个服务监听器,用来根据域名知道我应该使用哪个 api。如果有人访问,我将访问特定的 api url
www.domain.us -> api.en.anotherdomain.com
www.domain.it -> api.it.anotherimaginarydomain.com

服务监听器设置在 config.yml
services:
kernel.listener.domain_listener:
class: MyOwn\Bundle\WebBundle\Listener\DomainListener
arguments:
- %tld_allowed%
tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainGet }

在每次请求时,我都会使用相应的 api 域设置 session 值。

我希望能够指定 bazinga_geocoder 参数,因此我可以根据访问的域设置 google_maps 提供程序参数(区域设置、区域)。

我怎样才能做到这一点?我走错了路?

最佳答案

我不知道这个捆绑包是如何工作的,但看看代码:

  • 当找到新的提供者(通过配置)时,extension将创建一个新的 Definition编号为 bazinga_geocoder.provider.$name
  • 定义将有一个标签 bazinga_geocoder.provider私有(private) 知名度
  • compiler pass将寻找标记为 bazinga_geocoder.provider 的服务并调用registerProviderbazinga_geocoder.geocoder服务,即 Geocoder .

  • 也许这可能有效:注入(inject) bazinga_geocoder.provider.google_maps服务,然后调用 $provider->setLocale($locale) .我不知道设置区域的热度,因为 AbstractProvider 中没有 setter 类(不在 GoogleMapsProvider 中)。

    一个“残酷”的解决方案是创建一个新的 GoogleMapsProvider请求监听器中的实例,将其添加到地理编码器。监听器应该接受这些服务:
  • bazinga_geocoder.geocoder.adapter
  • bazinga_geocoder.geocoder

  • 那是:
    use Geocoder\Geocoder;
    use Geocoder\Provider\GoogleMapsProvider;
    use Geocoder\HttpAdapter\HttpAdapterInterface;
    use Symfony\Component\HttpKernel\Event\GetResponseEvent;

    class RequestListener
    {
    private $adapter;
    private $geo;

    public function __construct(HttpAdapterInterface $adapter, Geocoder $geo)
    {
    $this->adapter = $adapter;
    $this->geo = $geo;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
    // Get locale and region in some way

    // Create and register the provider, dynamically
    $provider = new GoogleMapsProvider($this->adapter, $locale, $region);
    $this->geo->registerProvider($provider);
    }
    }

    关于php - Symfony 2 : Set a parameter globally based on Request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760287/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com