Registering Your Own Providers

August 2, 2022 ยท View on GitHub

<< Back to documentation index

If you want to use your own provider in your application, create a service, and tag it as bazinga_geocoder.provider:

<service id="acme_demo.geocoder.my_provider" class="Acme\Demo\Geocoder\Provider\MyProvider">
    <argument type="service" id="foo_service" />
    <tag name="bazinga_geocoder.provider" />
</service>

The bundle will automatically register your provider into theGeocoder\ProviderAggregator service. However, it will not show up the web profiler because it is not registered with the PluginProvider.

If you want your provider to show up the web profiler you have to create a custom factory for your provider.

namespace Acme\Demo\Geocoder\Factory;

use Bazinga\GeocoderBundle\ProviderFactory\AbstractFactory;
use Acme\Demo\Geocoder\Provider\MyProvider;
use Acme\Demo\Service\Foo;

final class MyFactory extends AbstractFactory
{
    private $fooService;

    public function __construct(Foo $service)
    {
        $this->someService = $service;
    }

    protected function getProvider(array $config)
    {
        return new MyProvider($this->fooService);
    }
}
# config/packages/bazinga_geocoder.yaml
bazinga_geocoder:
    providers:
        acme:
            factory: Acme\Demo\Geocoder\Factory\MyFactory
            aliases: ['acme_demo.geocoder.my_provider']