donatj/phpuseragentparser
Lightweight PHP user-agent parser for detecting modern browsers and platforms from UA strings. Tiny codebase (<200 lines, 3 regexes), fast and accurate (including tricky IE versions). Composer-ready, 100% unit-tested, with optional object wrapper.
UserAgentParser class) allows for custom extensions (e.g., wrapping results in Laravel-specific DTOs or caching responses).composer require donatj/phpuseragentparser, with no manual dependencies beyond PHP 5.4+ and ext-ctype.ParseUserAgentMiddleware to attach parsed data to the request object).Cache::remember) to avoid reprocessing identical user-agent strings.parse_user_agent() function is deprecated in favor of namespaced \donatj\UserAgent\parse_user_agent(). Ensure all code uses the modern API.browser, platform, and version.$this->app->singleton(UserAgentParser::class, function ($app) {
return new \donatj\UserAgent\UserAgentParser();
});
Request::macro('userAgent', function () {
return $this->header('User-Agent');
});
Request::macro('parsedUserAgent', function () {
return app(UserAgentParser::class)->parse($this->userAgent());
});
public function handle(Request $request, Closure $next) {
$request->merge(['parsed_user_agent' => app(UserAgentParser::class)->parse($request->userAgent())]);
return $next($request);
}
@if($request->parsed_user_agent->browser() === \donatj\UserAgent\Browsers::MOBILE)
<div>Mobile user detected</div>
@endif
return response()->json([
'user_agent' => [
'browser' => $request->parsed_user_agent->browser(),
'platform' => $request->parsed_user_agent->platform(),
],
]);
/debug/user-agent).if (strpos($ua, 'Mobile')) → if ($ua->isMobile())).Browsers::GOOGLEBOT).mobile-detect).composer require donatj/phpuseragentparser
config/app.php under providers:
Donatj\UserAgent\UserAgentServiceProvider::class,
$this->app->bind(UserAgentParser::class, function () {
return new \donatj\UserAgent\UserAgentParser();
});
app/Http/Middleware/ParseUserAgent.php:
public function handle(Request $request, Closure $next) {
$request->parsed_user_agent = app(UserAgentParser::class)->parse($request->userAgent());
return $next($request);
}
app/Http/Kernel.php:
protected $middleware = [
\App\Http\Middleware\ParseUserAgent::class,
];
parse_user_agent() function is deprecated but remains functional. Plan to migrate to the namespaced version (\donatj\UserAgent\parse_user_agent) in a future release.$ua = app(UserAgentParser::class)->parse($request->userAgent());
if ($ua->browser() === \donatj\UserAgent\Browsers::UNKNOWN) {
\Log::warning('Undetected user-agent: ' . $request->userAgent());
}
How can I help you explore Laravel packages today?