elao/browser-detector-bundle
Installation:
composer require elao/browser-detector-bundle:1.1.*
Add to AppKernel.php:
new Elao\Bundle\BrowserDetectorBundle\ElaoBrowserDetectorBundle(),
Basic Configuration (config.yml):
elao_browser_detector:
browsers:
incompatible:
"IE": "<=7"
First Use Case: Inject the service in a controller to check browser compatibility:
use Elao\Bundle\BrowserDetectorBundle\Service\BrowserDetector;
class HomeController extends Controller
{
public function index(BrowserDetector $detector)
{
if ($detector->isCompatible()) {
return $this->render('homepage');
}
return $this->redirectToFallback();
}
}
Detecting Browser Compatibility:
if (!$detector->isCompatible()) {
$this->addFlash('error', 'Your browser is not supported.');
return $this->redirectToRoute('browser_fallback');
}
Partial Compatibility Handling:
elao_browser_detector:
browsers:
partially_compatible:
"Internet Explorer": "<9"
Use isPartiallyCompatible() to trigger feature flags or warnings.
User-Agent Parsing:
Access raw data via getBrowser() or getVersion():
$browserName = $detector->getBrowser()->getName();
$browserVersion = $detector->getBrowser()->getVersion();
Event-Based Integration:
Listen to kernel.request for real-time checks:
$eventDispatcher->addListener('kernel.request', function (GetResponseEvent $event) {
$detector = $event->getRequest()->get('elao_browser_detector');
if (!$detector->isCompatible()) {
$event->setResponse(new RedirectResponse('/fallback'));
}
});
Custom Logic with BrowserCap:
Extend functionality by injecting ElaoBrowserDetector service:
$browserCap = $detector->getBrowserCap();
if ($browserCap->isMobile()) {
// Mobile-specific logic
}
Deprecation Warning:
piwik/device-detector. Migrate if possible.Version Format Strictness:
"Firefox": "3.6-4.0") will silently fail. Validate inputs:
if (!$detector->isVersionValid('Firefox', '>3.6')) {
throw new \InvalidArgumentException('Invalid version format.');
}
Case Sensitivity:
"IE") must match exactly the parsed name. Use getBrowser()->getName() to debug mismatches.Caching Issues:
BrowserDetector service:
services:
elao_browser_detector:
public: true
synthetic: true
Kernel Event Dependency:
kernel.request. For CLI commands or non-request contexts, manually instantiate:
$detector = new \Elao\BrowserDetector\BrowserDetector($requestStack->getCurrentRequest());
Log Raw User-Agent:
$userAgent = $request->headers->get('User-Agent');
$this->logger->debug('User-Agent:', ['ua' => $userAgent]);
Verify Configuration: Dump the parsed browsers:
dump($detector->getBrowser()->getName(), $detector->getVersion());
Test Edge Cases:
Custom Browser Rules:
Extend the BrowserCap class to add proprietary checks:
class CustomBrowserCap extends \Elao\BrowserDetector\BrowserCap
{
public function isEnterpriseBrowser()
{
return strpos($this->getName(), 'Enterprise') !== false;
}
}
Override Default Logic:
Replace the service definition in services.yml:
services:
elao_browser_detector:
class: AppBundle\Service\CustomBrowserDetector
arguments: ['@request_stack']
Add Metadata: Attach browser data to the request for downstream use:
$request->attributes->set('browser', [
'name' => $detector->getBrowser()->getName(),
'version' => $detector->getVersion(),
'is_compatible' => $detector->isCompatible(),
]);
How can I help you explore Laravel packages today?