- Notifications
You must be signed in to change notification settings - Fork105
Open
Description
General Information
GeocoderLaravel Version: 4.6
Laravel Version: 10.13
PHP Version: 8.1
Operating System and Version: macOS Monterey
Issue Description
I'm getting the warning message in the title. How do I make geocoder use Psr17Factory?
Steps to Replicate
The code I am using:
$geocodeData = app('geocoder')->geocode($this->visitorIp)->get()->first();Here is my geocoder config:
<?phpuse App\Providers\Geocoder\Providers\GeoIP2\GeoIP2;use App\Providers\Geocoder\Providers\Ipstack\Ipstack;use Geocoder\Provider\Chain\Chain;use GeoIp2\WebService\Client as WebService;use Http\Adapter\Guzzle7\Client;return [ 'cache' => [ /* |----------------------------------------------------------------------- | Cache Store |----------------------------------------------------------------------- | | Specify the cache store to use for caching. The value "null" will use | the default cache store specified in /config/cache.php file. | | Default: null | */ 'store' => null, /* |----------------------------------------------------------------------- | Cache Duration |----------------------------------------------------------------------- | | Specify the cache duration in minutes. The default approximates a | "forever" cache, but there are certain issues with Laravel's forever | caching methods that prevent us from using them in this project. | | Default: 9999999 (integer) | */ 'duration' => 9999999, ], /* |--------------------------------------------------------------------------- | Providers |--------------------------------------------------------------------------- | | Here you may specify any number of providers that should be used to | perform geocaching operations. The `chain` provider is special, | in that it can contain multiple providers that will be run in | the sequence listed, should the previous provider fail. By | default the first provider listed will be used, but you | can explicitly call subsequently listed providers by | alias: `app('geocoder')->using('google_maps')`. | | Please consult the official Geocoder documentation for more info. | https://github.com/geocoder-php/Geocoder#providers | */ 'providers' => [ Chain::class => [ Ipstack::class => [env('IPSTACK_ACCESS_KEY')], GeoIP2::class => [], ], ], /* |--------------------------------------------------------------------------- | Adapter |--------------------------------------------------------------------------- | | You can specify which PSR-7-compliant HTTP adapter you would like to use. | There are multiple options at your disposal: CURL, Guzzle, and others. | | Please consult the official Geocoder documentation for more info. | https://github.com/geocoder-php/Geocoder#usage | | Default: Client::class (FQCN for CURL adapter) | */ 'adapter' => Client::class, /* |--------------------------------------------------------------------------- | Reader |--------------------------------------------------------------------------- | | You can specify a reader for specific providers, like GeoIp2, which | connect to a local file-database. The reader should be set to an | instance of the required reader class. | | Please consult the official Geocoder documentation for more info. | https://github.com/geocoder-php/geoip2-provider | | Default: null | */ 'reader' => [ WebService::class => [ env('MAXMIND_USER_ID'), env('MAXMIND_LICENSE_KEY'), ], ],];Here is Ipstack.php:
<?phpdeclare(strict_types=1);/* * This file is part of the Geocoder package. * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * * @license MIT License */namespace App\Providers\Geocoder\Providers\Ipstack;use App\Providers\Geocoder\Model\Address;use Geocoder\Collection;use Geocoder\Exception\InvalidArgument;use Geocoder\Exception\InvalidCredentials;use Geocoder\Exception\QuotaExceeded;use Geocoder\Exception\UnsupportedOperation;use Geocoder\Http\Provider\AbstractHttpProvider;use Geocoder\Model\AddressCollection;use Geocoder\Provider\Provider;use Geocoder\Query\GeocodeQuery;use Geocoder\Query\ReverseQuery;use Psr\Http\Client\ClientInterface;/** * @author Jonas Gielen <gielenjonas@gmail.com> */final class Ipstack extends AbstractHttpProvider implements Provider{ /** * @var string */ const GEOCODE_ENDPOINT_URL = 'http://api.ipstack.com/%s?access_key=%s'; /** * @var string */ private $apiKey; /** * @param ClientInterface $client an HTTP adapter * @param string $apiKey an API key */ public function __construct(ClientInterface $client, string $apiKey) { if (empty($apiKey)) { throw new InvalidCredentials('No API key provided.'); } $this->apiKey = $apiKey; parent::__construct($client); } /** * {@inheritdoc} */ public function geocodeQuery(GeocodeQuery $query): Collection { $address = $query->getText(); // This API doesn't handle IPs if (! filter_var($address, FILTER_VALIDATE_IP)) { throw new UnsupportedOperation('The Ipstack provider does not support street addresses.'); } if (in_array($address, ['127.0.0.1', '::1'])) { return new AddressCollection([$this->getLocationForLocalhost()]); } $url = sprintf(sprintf(self::GEOCODE_ENDPOINT_URL, $address, $this->apiKey)); if (null !== $query->getLocale()) { $url = sprintf('%s&language=%s', $url, $query->getLocale()); } $body = $this->getUrlContents($url); $data = json_decode($body, true); // https://ipstack.com/documentation#errors if (isset($data['error'])) { switch ($data['error']['code']) { case 301: throw new InvalidArgument('Invalid request (a required parameter is missing).'); case 303: throw new InvalidArgument('Bulk requests are not supported on your plan. Please upgrade your subscription.'); case 104: throw new QuotaExceeded('The maximum allowed amount of monthly API requests has been reached.'); case 101: throw new InvalidCredentials('No API Key was specified or an invalid API Key was specified.'); } } if (null === $data['latitude'] && null === $data['longitude'] && null === $data['connection'] && null === $data['city'] && null === $data['region_name'] && null === $data['region_code'] && null === $data['zip'] && null === $data['country_name'] && null === $data['country_code']) { return new AddressCollection([]); } $adminLevels = []; $adminLevels[] = ['name' => $data['region_name'], 'code' => $data['region_code'], 'level' => 1]; $locations[] = Address::createFromArray([ 'providedBy' => $this->getName(), 'latitude' => $data['latitude'] ?: null, 'longitude' => $data['longitude'] ?: null, 'connection' => $data['connection'] ?: null, 'locality' => $data['city'] ?: null, 'postalCode' => $data['zip'] ?: null, 'country' => $data['country_name'] ?: null, 'countryCode' => $data['country_code'] ?: null, 'adminLevels' => $adminLevels, ]); return new AddressCollection($locations); } /** * {@inheritdoc} */ public function reverseQuery(ReverseQuery $query): Collection { throw new UnsupportedOperation('The Ipstack provider is not able to do reverse geocoding.'); } /** * {@inheritdoc} */ public function getName(): string { return 'ipstack'; }}Here are the relevant composer installs:
"php": "^8.1","laravel/framework": "^10.13","geocoder-php/geoip2-provider": "^4.3","geocoder-php/ipstack-provider": "^0.4.0","toin0u/geocoder-laravel": "^4.6","guzzlehttp/guzzle": "^7.7","php-http/guzzle7-adapter": "^1.0",Stack Trace
Class "Nyholm\Psr7\Factory\HttplugFactory" is deprecated since version 1.8, use "Nyholm\Psr7\Factory\Psr17Factory" instead. in /vendor/nyholm/psr7/src/Factory/HttplugFactory.php on line 18
Metadata
Metadata
Assignees
Labels
No labels