sylius/twig-extra
Sylius Twig Extra is a Twig extension component from the Sylius Stack initiative, providing additional Twig features and integrations tailored for Sylius-based applications.
Installation Add the package via Composer:
composer require sylius/twig-extra
Register the bundle in config/bundles.php (Symfony 4+):
return [
// ...
Sylius\TwigExtra\SyliusTwigExtraBundle::class => ['all' => true],
];
First Use Case
Use the currency filter to format prices in Twig templates:
{{ 1999 | currency('EUR') }}
Output: €1,999.00
Where to Look First
currency filter is Sylius-specific).Currency Formatting
{% set price = 1234.56 %}
{{ price | currency('USD', 'en_US') }} {# $1,234.56 #}
'de_DE' for 1.234,56 €).SyliusTwigExtraBundle's currency_formatter service.Date/Time Utilities
Use date filter with Sylius-specific formats:
{{ '2023-12-25' | date('Y-m-d', 'Europe/Paris') }}
Intl component.Collection Helpers
{% for item in items|slice(0, 5) %}
{{ loop.index }}: {{ item.name }}
{% endfor %}
slice with Sylius optimizations.Integration with Forms
{{ form_widget(form, { 'attr': {'class': 'form-control'} }) }}
Custom Extensions
Create a new Twig extension by extending AbstractExtension:
use Sylius\TwigExtra\Extension\AbstractExtension;
class MyCustomExtension extends AbstractExtension {
public function getFunctions(): array {
return [
new \Twig\TwigFunction('my_function', [$this, 'myFunction']),
];
}
}
Register it in services.yaml:
services:
App\Twig\MyCustomExtension:
tags: ['twig.extension']
Overriding Defaults
Replace the currency_formatter service in services.yaml:
services:
Sylius\TwigExtra\Formatter\CurrencyFormatter:
arguments:
$locale: '%kernel.default_locale%'
$currency: 'GBP' # Override default
Locale Dependencies
currency filter relies on Symfony’s Intl component. Ensure your server has ICU data installed:
sudo apt-get install icu-devtools # Debian/Ubuntu
composer require symfony/intl
Namespace Conflicts
CurrencyExtension or DateExtension to prevent collisions with Sylius’s built-ins.Caching Issues
php bin/console cache:clear
Sylius-Specific Assumptions
currency) assume Sylius’s Money type. For vanilla Symfony, use Symfony’s Intl directly:
{{ amount | format_currency('EUR') }} {# Symfony 5.3+ #}
Check Registered Extensions Dump loaded Twig extensions in a template:
{{ dump(_twig.extensions) }}
Look for Sylius\TwigExtra\Extension\* entries.
Filter/Function Existence Verify a filter exists with:
{% if 'currency' in _twig.filters %}
{{ 100 | currency('USD') }}
{% endif %}
Add Custom Filters
Extend AbstractExtension and register the service:
tags: ['twig.extension']
Modify Currency Formatting
Override the currency_formatter service or create a decorator:
Sylius\TwigExtra\Formatter\CurrencyFormatter:
decorates: sylius_twig_extra.currency_formatter
arguments: ['@.inner']
Localization
Override translation files in translations/messages.en.yaml:
currency:
symbol: '$' # Custom symbol for USD
Performance For heavy templates, pre-compile Twig:
php bin/console twig:compile
How can I help you explore Laravel packages today?