Installation:
composer require efficience-it/speedtest-bundle
Ensure EfficienceIt\SpeedtestBundle\SpeedtestBundle::class is registered in config/bundles.php.
Route Configuration:
Create config/routes/speedtest.yaml with:
speedtest:
resource: '@SpeedtestBundle/Resources/config/routes.yaml'
prefix: /speedtest
This auto-generates /speedtest routes (e.g., /speedtest, /speedtest/results).
First Use Case: Embed the speedtest in a Twig template by calling the service in a controller:
use EfficienceIt\SpeedtestBundle\Service\SpeedtestService;
public function index(SpeedtestService $speedtest): Response
{
return $this->render('home/index.html.twig', [
'speedtest' => $speedtest->displaySpeedtest(),
]);
}
Include the output in Twig:
{{ speedtest|raw }}
Standalone Speedtest Page:
Use the predefined routes (/speedtest, /speedtest/results) for a dedicated page. No additional controller logic required.
Embedding in Existing Pages:
displaySpeedtest() in any controller and pass the output to Twig.Programmatic Testing:
Use the SpeedtestService to trigger tests programmatically:
$results = $speedtest->runTest(); // Returns raw data (download/upload speeds, latency)
Format results for display:
<div class="speedtest-results">
Download: {{ results.download }} Mbps
Upload: {{ results.upload }} Mbps
</div>
Configuration Overrides:
Override default settings (e.g., test servers, UI theme) via config/packages/speedtest.yaml:
speedtest:
servers: ['us', 'eu'] # Custom server regions
theme: 'dark' # 'light' or 'dark'
{{ EncoreEntryLink }} if integrating with Webpack Encore.speedtest.cache.ttl in YAML).Route Conflicts:
The /speedtest prefix may clash with existing routes. Verify uniqueness in config/routes.yaml.
JavaScript Dependencies: The bundle relies on external JS libraries (e.g., Chart.js). Ensure no global conflicts if your app uses the same libraries.
CORS Issues:
Speedtest results depend on external servers. If testing behind a proxy/firewall, whitelist required domains (e.g., librespeed.org).
Twig Auto-escaping:
displaySpeedtest() outputs raw HTML. Escape dynamically if embedding in unsafe contexts:
{{ speedtest|striptags }} {# Sanitize if needed #}
No Output?: Check:
bundles.php registration.php bin/console debug:router | grep speedtest).Slow Tests: Limit servers in config to reduce latency:
speedtest:
servers: ['eu-west']
Custom Templates:
Override Twig templates in templates/speedtest/ (e.g., speedtest.html.twig).
API Extensions:
Extend SpeedtestService to add custom metrics:
// src/Service/CustomSpeedtestService.php
class CustomSpeedtestService extends SpeedtestService
{
public function getPing(): float
{
// Custom logic
}
}
Bind in services.yaml:
EfficienceIt\SpeedtestBundle\Service\SpeedtestService: '@custom_speedtest_service'
Localization:
Translate UI strings by overriding translations/speedtest.en.yaml (if supported in future updates).
Headless Mode:
Disable UI and use raw data via runTest() for CLI tools or APIs.
How can I help you explore Laravel packages today?