Laravel GeoIP is a package that allows you to determine the geographic location of your application’s visitors based on their IP addresses. This can be useful for various purposes, such as personalizing content, analyzing user behavior, or implementing location-based features.
Key Features
- IP Geolocation: Easily retrieve geographic information about visitors, including country, city, latitude, and longitude.
- Lightweight: Simple installation and easy integration with Laravel applications.
- Multiple Providers: Supports multiple geolocation service providers, giving you flexibility in choosing a data source.
- Caching Support: Option to cache results for improved performance.
Installation
To install Laravel GeoIP, you can use Composer. Run the following command in your terminal:
1 |
composer require "torann/geoip" |
Configuration
After installing the package, you need to publish the configuration file:
1 |
php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" |
This will create a configuration file named geoip.php
in the config
directory.
Configuration Options
Open the config/geoip.php
file to configure the package. You can select the geolocation service provider and set any necessary options.
For example, to use the default provider (which usually includes a free service), configure the driver
option:
1 |
'driver' => 'ipinfo', // Available drivers: 'ipinfo', 'ipstack', 'geoip', etc. |
Usage
To use Laravel GeoIP, you can utilize the GeoIP
facade in your controllers, middleware, or anywhere in your application.
Example: Getting Visitor Location
Here’s how to get the visitor’s location information:
1 2 3 4 5 6 7 8 |
use GeoIP; public function index() { $location = GeoIP::getLocation(); return response()->json($location); } |
The $location
variable will contain data such as:
ip
: Visitor’s IP addresscountry
: Visitor’s countrystate
: Visitor’s statecity
: Visitor’s citylatitude
: Latitude of the locationlongitude
: Longitude of the locationtimezone
: Time zone of the location
Example: Middleware for Localization
You might want to use the visitor’s location for localization. Here’s an example of how you can create middleware that uses the visitor’s location to set the application locale:
- Create a middleware:
bash
1php artisan make:middleware GeoIPMiddleware - In the
GeoIPMiddleware.php
file, use theGeoIP
facade to retrieve the location and set the locale:php
123456789101112131415161718192021namespace App\Http\Middleware;use Closure;use GeoIP;class GeoIPMiddleware{public function handle($request, Closure $next){$location = GeoIP::getLocation();// Set the application locale based on the countryif ($location['country'] === 'FR') {app()->setLocale('fr');} else {app()->setLocale('en');}return $next($request);}} - Register the middleware in your
app/Http/Kernel.php
:php
123456protected $middlewareGroups = ['web' => [// Other middleware...\App\Http\Middleware\GeoIPMiddleware::class,],];
Caching
To improve performance, you can enable caching in the config/geoip.php
file:
1 2 3 4 |
'cache' => [ 'enabled' => true, 'duration' => 60, // Duration in minutes ], |
Conclusion
Laravel GeoIP is a powerful tool for determining your visitors’ geographic locations, enabling you to enhance user experience by personalizing content and features based on location. Its easy integration and support for multiple providers make it a valuable addition to any Laravel application.