elao/browser-detector
Deprecated browser/user-agent detector for PHP. Provides a BrowserDetector class to load configuration and parse/set a User-Agent string. The README recommends using piwik/device-detector instead for ongoing support.
Installation (if still needed for legacy projects):
composer require elao/browser-detector
Note: Officially deprecated; use piwik/device-detector instead.
Basic Usage (for reference only):
use Elao\BrowserDetector\BrowserDetector;
$detector = new BrowserDetector(true);
$detector->loadConfiguration([]); // Empty array for default config
$detector->setUserAgent($_SERVER['HTTP_USER_AGENT'] ?? '');
$browser = $detector->getBrowser();
$version = $detector->getBrowserVersion();
First Use Case: Log browser/version in middleware or a controller:
public function showBrowserInfo(Request $request)
{
$detector = new BrowserDetector(true);
$detector->setUserAgent($request->userAgent());
return response()->json([
'browser' => $detector->getBrowser(),
'version' => $detector->getBrowserVersion(),
]);
}
Middleware Integration (Legacy Approach):
namespace App\Http\Middleware;
use Elao\BrowserDetector\BrowserDetector;
class DetectBrowser
{
public function handle($request, Closure $next)
{
$detector = new BrowserDetector(true);
$detector->setUserAgent($request->userAgent());
$request->merge(['browser' => $detector->getBrowser()]);
return $next($request);
}
}
Service Provider Binding (For Reusability):
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(BrowserDetector::class, function () {
$detector = new BrowserDetector(true);
$detector->loadConfiguration(config('browser_detector.config', []));
return $detector;
});
}
Configuration Management:
Override default rules via config/browser_detector.php:
return [
'rules' => [
'Firefox' => [
'pattern' => '/Firefox\/(\d+\.\d+)/',
'name' => 'Firefox',
],
],
];
Caching Results (Performance Optimization):
$cacheKey = 'browser_'.$request->ip().'_'.$request->userAgent();
$browser = cache()->remember($cacheKey, 3600, function () use ($detector) {
return $detector->getBrowser();
});
Deprecation Warning:
piwik/device-detector for new projects.getBrowser() with getClient()->getBrowserName() in the new package.Outdated Patterns:
$_SERVER['HTTP_USER_AGENT'] directly. Modern Laravel uses $request->userAgent().piwik/device-detector).Configuration Quirks:
loadConfiguration([]) expects an array of rules, not a file path.Performance:
Verify User Agent:
dd($_SERVER['HTTP_USER_AGENT'] ?? $request->userAgent());
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)").Inspect Rules:
$detector->getRules(); // Dump loaded patterns
Fallback Logic:
$browser = $detector->getBrowser() ?: 'Unknown';
Custom Rules:
Extend via loadConfiguration():
$detector->loadConfiguration([
'CustomBrowser' => [
'pattern' => '/CustomApp\/(\d+\.\d+)/',
'name' => 'CustomBrowser',
],
]);
Event Hooks (Legacy):
Override BrowserDetector class to add pre/post-processing:
class ExtendedDetector extends BrowserDetector
{
public function getBrowser()
{
$browser = parent::getBrowser();
// Add custom logic (e.g., log unknown browsers)
return $browser;
}
}
Integration with Laravel Scout: For analytics, pair with Scout behaviors:
Scout::behavior(function ($model, $driver) {
$browser = app(BrowserDetector::class)->getBrowser();
return ['browser' => $browser];
});
How can I help you explore Laravel packages today?