Skip to content

Commit 2ac108c

Browse files
author
Ilya Shtricul
committed
Register all providers
Not only chain provider registration
1 parent 4af1483 commit 2ac108c

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/GeocoderServiceProvider.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ function ($arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null) use ($app, $pr
7171

7272
$this->app['geocoder'] = $this->app->share(function($app) {
7373
$geocoder = new Geocoder;
74-
$geocoder->registerProvider($app['geocoder.chain']);
74+
$geocoder->registerProviders(
75+
$this->getGeocoderProviders($this->app['config']->get('geocoder.providers'))
76+
);
7577

7678
return $geocoder;
7779
});
@@ -86,4 +88,32 @@ public function provides()
8688
{
8789
return ['geocoder', 'geocoder.adapter', 'geocoder.chain'];
8890
}
91+
92+
protected function getGeocoderProviders(array $providersConfig)
93+
{
94+
$providers = [];
95+
96+
foreach($providersConfig as $provider => $arguments) {
97+
//Chain provider
98+
if(is_int($provider)){
99+
$chainProviders = $this->getGeocoderProviders($arguments);
100+
$providers[] = new ChainProvider($chainProviders);
101+
}else {
102+
if (0 !== count($arguments)) {
103+
$providers[] = call_user_func_array(
104+
function ($arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null) use ($provider) {
105+
return new $provider($this->app['geocoder.adapter'], $arg1, $arg2, $arg3, $arg4);
106+
},
107+
$arguments
108+
);
109+
110+
continue;
111+
}
112+
113+
$providers[] = new $provider($this->app['geocoder.adapter']);
114+
}
115+
}
116+
117+
return $providers;
118+
}
89119
}

0 commit comments

Comments
 (0)