Install the Bundle
composer require ob/highcharts-bundle
Register the bundle in config/bundles.php:
return [
// ...
Ob\HighchartsBundle\ObHighchartsBundle::class => ['all' => true],
];
Enable Twig Extensions
Ensure Twig is configured in config/packages/twig.yaml:
twig:
extensions:
- Ob\HighchartsBundle\Twig\HighchartsExtension
First Chart in Twig Create a basic line chart in a Twig template:
{{ highcharts_chart({
'title': {'text': 'Basic Chart'},
'series': [{
'name': 'Data',
'data': [1, 2, 3, 4, 5]
}]
}) }}
Verify Highcharts JS
Include the Highcharts library in your base template (check Resources/doc/installation.md for CDN/self-hosted options):
<script src="https://code.highcharts.com/highcharts.js"></script>
Use PHP arrays to bind data from controllers:
// src/Controller/ChartController.php
public function salesChart()
{
$data = [10, 20, 30, 40, 50];
return $this->render('chart/sales.html.twig', [
'chartData' => $data,
]);
}
{{ highcharts_chart({
'series': [{
'data': chartData
}]
}) }}
Create a base chart template (_chart.html.twig):
{% macro chart(type, data, options={}) %}
{{ highcharts_chart({
'chart': {'type': type},
'series': [{
'data': data
}],
**options
}) }}
{% endmacro %}
Usage:
{{ _self.chart('column', [1, 2, 3], {
'title': {'text': 'Reusable Chart'}
}) }}
Fetch data from an API and render dynamically:
// Controller
public function apiChart()
{
$response = $this->httpClient->request('GET', 'https://api.example.com/data');
$data = json_decode($response->getContent(), true);
return $this->render('chart/api.html.twig', ['data' => $data]);
}
{{ highcharts_chart({
'series': data.series,
'xAxis': {'categories': data.categories}
}) }}
Define chart configurations in services (config/services.yaml):
services:
App\Chart\Configurator:
arguments:
$defaultOptions: { 'chart': { 'type': 'line' } }
Inject and extend in controllers:
public function __construct(private Configurator $configurator) {}
public function customChart()
{
$options = $this->configurator->getOptions();
$options['series'] = [[ 'data' => [1, 2, 3] ]];
return $this->render('chart/custom.html.twig', ['options' => $options]);
}
Symfony vs. Laravel Compatibility
Symfony\Bridge\Twig\Extension\ProfilerExtension for debugging in Laravel (if using Symfony components).@twig directives or use a bridge like laravel-twig.Asset Management
php bin/console assets:install
// resources/js/app.js
import 'highcharts';
Routing and Controllers
Route::get('/chart/{user}', [ChartController::class, 'userChart']);
public function userChart(User $user)
{
return view('chart.user', ['data' => $user->stats]);
}
{% if showChart %}
<script src="https://code.highcharts.com/highcharts.js"></script>
{{ highcharts_chart(...) }}
{% endif %}
Cache facade):
$cachedChart = Cache::remember("chart_{$key}", now()->addHours(1), function() {
return view('chart.template', ['data' => $data])->render();
});
highcharts_chart) won’t work in Blade templates by default.@twig
{{ highcharts_chart(...) }}
@endtwig
document.ready:
<script>
document.addEventListener('DOMContentLoaded', function() {
// Highcharts will initialize here
});
</script>
array_merge or the bundle’s mergeOptions helper:
{{ highcharts_chart({
**defaultOptions,
'series': customSeries
}) }}
$data = json_decode(json_encode($complexObject), true);
{{ dump(highcharts_chart(...))|raw }}
highcharts object.<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script>
Highcharts.setOptions({ debug: true });
</script>
config/packages/twig.yaml:
twig:
strict_variables: true
// src/Twig/Extension/CustomHighchartsExtension.php
class CustomHighchartsExtension extends \Twig\Extension\AbstractExtension
{
public function getFunctions()
{
return [
new \Twig\TwigFunction('custom_chart', [$this, 'renderCustomChart']),
];
}
public function renderCustomChart(array $options)
{
// Custom logic
return $this->renderChart($options);
}
}
Register in services.yaml:
services:
App\Twig\Extension\CustomHighchartsExtension:
tags: ['twig.extension']
services:
Ob\HighchartsBundle\Highcharts\Highcharts:
arguments:
$defaultOptions:
'chart': { 'style': { 'fontFamily': 'YourFont' } }
{{ highcharts_chart({
'chart': {
'events': {
'load': 'function() { console.log("Chart loaded"); }'
}
}
}) }}
chart vs. highcharts Objecthighcharts object, but the bundle uses chart by default.{{ highcharts_chart({
'highcharts': {
'chart': { 'type': 'pie' },
'series': [...]
}
}) }}
$options = [
'lang' => [
'decimalPoint' => ',',
'thousandsSep' => ' ',
How can I help you explore Laravel packages today?