PHP Desktop and Mobile User Agent Parser
Last updated on by Paul Redmond
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 methodsAgent::isFirefox();Agent::isIPhone(); // Device typeAgent::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 nameAgent::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"