limit = $limit; } /** * Set client factory * @param ClientFactory $factory * @return void */ public function setClientFactory($factory) { $this->clientFactory = $factory; } /** * Get client factory * @return ClientFactory */ public function getClientFactory() { return $this->clientFactory ?? Http::getFacadeRoot(); } /** * Request to provider API * @param string $uri * @param array $query * @param array $opts * @return ClientResponse */ protected function request(string $uri, array $query, array $opts = []) { return $this->getClientFactory()->withOptions($this->defaults($opts, [ 'headers' => [ 'Referer' => Url::to('/'), ], ]))->get($uri, $query); } /** * Config data * @param string $key * @param mixed $default * @param mixed $opts * @return mixed */ public function providerConfig($key, $default = '', $opts = []) { return config::sysAdmin( $this->providerConfigKey($key), $default, (!empty($opts) ? $opts : TYPE_NOTAGS) ); } /** * Config data full key * @param string $key * @return string */ public function providerConfigKey($key) { return 'geo.geocode.providers.' . $this->providerKey() . '.' . $key; } }