In this example, you will get user location information based on their IP address. You need to install a package called stevebauman/location.
The stevebauman/location is an excellent library for detecting a user’s location by their IP Address. It has ready-to-use methods for getting user’s location data.
By using this package you can get below information:
- Country Name
- Country Code
- Region Name
- Region Code
- City Name
- Zip Code
- ISO Code
- Postal Code
- Metro Code
- Latitude and Longitude
Install stevebauman/location Package
For Installation, you just need to enter the below command into the terminal.
composer require stevebauman/location
Here, we will use this package using import so we don’t need to register into our application.
Create Location Controller
Let’s create a controller for getting location data and display it using view. First thing you need to enter the below command to create a controller :
php artisan make:controller LocationController
<?php
namespace App\Http\Controllers;
use Stevebauman\Location\Facades\Location; //import
use Illuminate\Http\Request;
class LocationController extends Controller
{
public function getLocation(Request $request)
{
// $ip = $request->ip(); /*For Actual IP address on Live Server */
$ip = '66.150.71.232'; /* Static IP address */
$locationInfo = Location::get($ip);
return view('location-info', compact('locationInfo'))
}
}
Here, the getLocation() method will get the user’s IP address from the request and get location data. At last, Pass that location data to view./p>
If you are running your application on a live server then you need to use $request->ip() method to get information. Here, an IP address is defined statically for testing.
Create View
Now, you have location data so you will need a view to display information to a user. So create a view in the views directory and make the below changes.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Display User Information Based On IP address - Codewolfy.com</title>
</head>
<body>
<div class="container">
<div class="card">
<div class="card-body">
@if($locationInfo)
<h4>IP Address: {{ $locationInfo->ip }}</h4>
<h4>Country : {{ $locationInfo->countryName }}</h4>
<h4>Country Code: {{ $locationInfo->countryCode }}</h4>
<h4>Region Code: {{ $locationInfo->regionCode }}</h4>
<h4>Region Name: {{ $locationInfo->regionName }}</h4>
<h4>City Name: {{ $locationInfo->cityName }}</h4>
<h4>Zip Code: {{ $locationInfo->zipCode }}</h4>
<h4>Latitude: {{ $locationInfo->latitude }}</h4>
<h4>Longitude: {{ $locationInfo->longitude }}</h4>
<h4>Area Code: {{ $locationInfo->areaCode }}</h4>
@else
<h3>Something went wrong. Please try again</h3>
@endif
</div>
</div>
</div>
</body>
</html>
Add Route
In the Last Step, you need to add a route. open the route file and make the below changes :
<?php
use App\Http\Controllers\LocationController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('get-my-location', [LocationController::class, 'getLocation']);
Testing Our Application / Functionality
Now we are ready to test our functionality. open the terminal and run the below command :
php artisan serve
Open this URL in a browser and it will show location information.
http://127.0.0.1:8000/get-my-location
Whenever the user hits this URL it will display location data and in addition, if location data is now found then it will display an error message. Generally, errors arise when you are not running the application into production and trying to get IP address using $request->ip().