sajidwarner/laravel-device-detector
Installation:
composer require sajidwarner/laravel-device-detector
Auto-discovery handles service provider/facade registration.
Publish Config (if customization needed):
php artisan vendor:publish --provider="SajidWarner\LaraTrack\LaraTrackServiceProvider"
First Use Case: Detect device type in a controller:
use SajidWarner\LaraTrack\Facades\LaraTrack;
public function show(Request $request) {
$device = LaraTrack::detect($request);
if ($device['is_mobile']) {
return view('mobile.view');
}
return view('desktop.view');
}
LaraTrack::detect(), LaraTrack::isMobile(), LaraTrack::getBrowser()@mobile, @desktop, @robot (for quick UI conditionals)laratrack.block-bots (no manual registration)Request-Based Detection:
$device = LaraTrack::detect($request); // Pass request object
Sec-CH-UA for modern browsers).Middleware Integration:
Route::middleware(['laratrack.block-bots', 'laratrack.mobile-only'])->group(...);
Event-Driven Actions:
// EventServiceProvider.php
protected $listen = [
BotDetected::class => [LogBotAction::class],
];
Blade Templating:
@mobile
<link rel="stylesheet" href="/mobile.css">
@endmobile
.env (LARATRACK_GEO_ENABLED=true) and cache responses per-IP.LaraTrack::extend() (e.g., add custom bot signatures).php artisan laratrack:test with custom UAs/IPs to validate edge cases.Geolocation API Limits:
LARATRACK_GEO_CACHE_MINUTES=1440).Tor/VPN Detection False Positives:
config/laratrack.php:
'allowed_ips' => ['192.168.1.0/24'],
Blade Directives in Loops:
@mobile directives render once per view. For dynamic content, use PHP checks:
@if(LaraTrack::isMobile()) ... @endif
Client Hints (Sec-CH-UA):
Sec-CH-UA over User-Agent.php artisan laratrack:test using:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Sec-CH-UA: "Not_A Brand";v="99", "Google Chrome";v="120", "Chromium";v="120"
php artisan laratrack:test "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)"
\Log::debug('Device Data', LaraTrack::detect($request)->toArray());
Custom Bot Signatures:
LaraTrack::extend('bot', function ($userAgent) {
return str_contains($userAgent, 'CustomBot');
});
Override Middleware Messages:
// config/laratrack.php
'middleware' => [
'bot_message' => 'Access denied: {botName}',
];
Disable Features:
// config/laratrack.php
'disable_geolocation' => env('APP_ENV') === 'local',
'fire_events' => false,
LARATRACK_GEO_ENABLED=false if geolocation isn’t needed.How can I help you explore Laravel packages today?