DEV Community

Cover image for Supercharge Your Symfony App with Smart Device Detection: Meet EprofosUserAgentAnalyzerBundle
Eprofos
Eprofos

Posted on

Supercharge Your Symfony App with Smart Device Detection: Meet EprofosUserAgentAnalyzerBundle

The Challenge of Modern Web Development

Have you ever struggled with delivering the right experience to users across different devices? In an era where users switch between phones, tablets, and desktops seamlessly, detecting devices accurately can be a major headache. That's where EprofosUserAgentAnalyzerBundle comes in.

What Makes This Bundle Special?

Unlike traditional user agent parsers, EprofosUserAgentAnalyzerBundle offers:

1. Zero-Configuration Setup

composer require eprofos/user-agent-analyzer
Enter fullscreen mode Exit fullscreen mode

That's it! The bundle auto-configures itself in your Symfony application.

2. Crystal-Clear Twig Integration

Transform this complex detection:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false) {
    // Is it really mobile? What about tablets?
    // What about desktop mode on mobile?
}
Enter fullscreen mode Exit fullscreen mode

Into this elegant solution:

{% if is_mobile() %}
    <div class="mobile-view">
        {{ include('components/mobile_navigation.html.twig') }}
    </div>
{% endif %}
Enter fullscreen mode Exit fullscreen mode

3. Comprehensive Device Intelligence

use Eprofos\UserAgentAnalyzerBundle\Service\UserAgentAnalyzer;

class ResponsiveController
{
    public function index(UserAgentAnalyzer $analyzer)
    {
        $result = $analyzer->analyzeCurrentRequest();

        // Rich device information
        $deviceInfo = [
            'type' => $result->getDeviceType(),
            'os' => [
                'name' => $result->getOsName(),
                'version' => $result->getOsVersion(),
                'is64bit' => $result->is64BitsMode()
            ],
            'browser' => [
                'name' => $result->getBrowserName(),
                'version' => $result->getBrowserVersion(),
                'isWebview' => $result->isBrowserAndroidWebview() || $result->isBrowserIosWebview()
            ]
        ];

        // Use this information to:
        // 1. Optimize content delivery
        // 2. Enable platform-specific features
        // 3. Track usage analytics
    }
}
Enter fullscreen mode Exit fullscreen mode

Real-World Use Cases

1. E-commerce Platform Optimization

{# Optimize product gallery based on device #}
{% if is_mobile() %}
    {# Show swipeable gallery #}
    {{ include('product/mobile_gallery.html.twig') }}
{% elseif is_tablet() %}
    {# Show touch-optimized grid #}
    {{ include('product/tablet_gallery.html.twig') }}
{% else %}
    {# Show full desktop experience #}
    {{ include('product/desktop_gallery.html.twig') }}
{% endif %}
Enter fullscreen mode Exit fullscreen mode

2. Progressive Web App Features

{# Enable platform-specific features #}
{% if is_android() %}
    {# Android-specific PWA features #}
    {{ include('pwa/android_install_prompt.html.twig') }}
{% elseif is_ios() %}
    {# iOS-specific PWA features #}
    {{ include('pwa/ios_install_prompt.html.twig') }}
{% endif %}
Enter fullscreen mode Exit fullscreen mode

3. Performance Optimization

use Eprofos\UserAgentAnalyzerBundle\Service\UserAgentAnalyzer;

class MediaController
{
    public function serveVideo(UserAgentAnalyzer $analyzer)
    {
        $result = $analyzer->analyzeCurrentRequest();

        // Optimize video delivery
        $videoConfig = match(true) {
            $result->isMobile() => [
                'quality' => 'adaptive',
                'preload' => 'metadata',
                'format' => 'mp4'
            ],
            $result->isTablet() => [
                'quality' => 'high',
                'preload' => 'auto',
                'format' => 'mp4'
            ],
            default => [
                'quality' => 'highest',
                'preload' => 'auto',
                'format' => 'webm'
            ]
        };

        return $this->render('video/player.html.twig', [
            'config' => $videoConfig
        ]);
    }
}
Enter fullscreen mode Exit fullscreen mode

Advanced Features Deep Dive

1. Browser Capability Detection

$result = $analyzer->analyzeCurrentRequest();

// Check for specific browser features
if ($result->getBrowserChromiumVersion()) {
    // Enable Chrome-specific features
}

if ($result->getBrowserWebkitVersion()) {
    // Enable WebKit-specific features
}

// Check for desktop mode on mobile
if ($result->isBrowserDesktopMode()) {
    // Adjust layout accordingly
}
Enter fullscreen mode Exit fullscreen mode

2. Operating System Intelligence

// Detailed OS information
$osInfo = match($result->getOsName()) {
    'Windows' => [
        'version' => $result->getOsVersion(),
        'family' => $result->getOsFamily(),
        'is64bit' => $result->is64BitsMode()
    ],
    'macOS' => [
        'version' => $result->getOsVersion(),
        'codename' => $result->getOsCodename(), // e.g., "Monterey"
        'architecture' => $result->is64BitsMode() ? 'x64' : 'x86'
    ],
    default => [
        'name' => $result->getOsName(),
        'version' => $result->getOsVersion()
    ]
};
Enter fullscreen mode Exit fullscreen mode

Performance Considerations

The bundle is designed with performance in mind:

  1. Results are cached for subsequent requests
  2. Lightweight pattern matching
  3. No external API calls
  4. Minimal memory footprint

About EPROFOS

EPROFOS (École professionnelle de formation spécialisée) is the reference school for specialized training in web, mobile, and software development. We specialize in developing high-quality web solutions and are committed to creating tools that help developers build better applications more efficiently.

Get Started Today

composer require eprofos/user-agent-analyzer
Enter fullscreen mode Exit fullscreen mode

Visit our GitHub repository for:

  • 📚 Comprehensive documentation
  • 🚀 Sample applications
  • 🤝 Community support
  • 🐛 Issue tracking

Join us in making web development smarter and more efficient!

SymfonyBundle #WebDevelopment #PHP #ResponsiveDesign #DevTools #OpenSource

Top comments (0)