Laravel Packages

PHP Desktop and Mobile User Agent Parser

Published Updated
PHP Desktop and Mobile User Agent Parser image

The jenssegers-agent package is a desktop/mobile user agent parser with support for Laravel, based on MobileDetect. You can use this package in any PHP application, and it also provides a Laravel service provider, giving you a service Facade:

use Jenssegers\Agent\Facades\Agent;
 
Agent::is('Firefox');
Agent::is('iPhone');
 
// Magic methods
Agent::isFirefox();
Agent::isIPhone();
 
// Device type
Agent::isDesktop();
Agent::isMobile();
Agent::isTablet();
Agent::isPhone();

Besides user agent helpers, the Agent service provides a language helper, device name method, platform, and more. For example, you could get the accepted browser languages using the following method:

Agent::languages(); // ['en-us', 'en']

Using the languages method, you could set the locale during a request in a middleware. Here's a simple example just to illustrate just off the top of my head:

public function handle(Request $request, Closure $next): Response
{
$supported_locales = ['en', 'es'];
$user_locales = Agent::languages();
 
foreach ($user_locales as $locale) {
if (in_array($locale, $supported_locales)) {
app()->setLocale($locale);
}
}
 
return $next($request);
}

If you do not support the locale, the config('app.fallback_locale') setting will define the locale. You might also use the languages() method in middleware to redirect a locale-specific route prefix /{locale}/ based on the user agent's supported language.

Route::prefix('/{locale}')->group(function () {
// ...
})->whereIn('locale', ['en', 'es']);

The Agent service can also determine if the current user agent is a bot and what type of bot:

// Is the user a bot?
Agent::isRobot(); // bool
 
// get the robot name
Agent::robot();

Lastly, to get the device name, platform, and browser, you can use the aptly named methods on the facade:

Agent::device(); // "Macintosh"
Agent::platform(); // "OS X"
Agent::browser(); // "Safari"
Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Decide with Jev: Laravel AI That Answers with a Probability image

Decide with Jev: Laravel AI That Answers with a Probability

Read article
JetBrains Air: Run AI Coding Agents in JetBrains IDEs image

JetBrains Air: Run AI Coding Agents in JetBrains IDEs

Read article
Memoize Tagged Cache Reads in Laravel image

Memoize Tagged Cache Reads in Laravel

Read article
Eloquent Refreshes: Load Generated Columns After Save image

Eloquent Refreshes: Load Generated Columns After Save

Read article
Laravel AI SDK 1.0 Adds Classification and Tool Approvals image

Laravel AI SDK 1.0 Adds Classification and Tool Approvals

Read article
Tagged Memoized Cache and Model Refreshes in Laravel 13.33 image

Tagged Memoized Cache and Model Refreshes in Laravel 13.33

Read article