Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Twig Extra Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. 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],
    ];
    
  2. First Use Case Use the currency filter to format prices in Twig templates:

    {{ 1999 | currency('EUR') }}
    

    Output: €1,999.00

  3. Where to Look First


Implementation Patterns

Common Workflows

  1. Currency Formatting

    {% set price = 1234.56 %}
    {{ price | currency('USD', 'en_US') }}  {# $1,234.56 #}
    
    • Supports locales (e.g., 'de_DE' for 1.234,56 €).
    • Extend via SyliusTwigExtraBundle's currency_formatter service.
  2. Date/Time Utilities Use date filter with Sylius-specific formats:

    {{ '2023-12-25' | date('Y-m-d', 'Europe/Paris') }}
    
    • Integrates with Symfony’s Intl component.
  3. Collection Helpers

    {% for item in items|slice(0, 5) %}
        {{ loop.index }}: {{ item.name }}
    {% endfor %}
    
    • Extends Twig’s built-in slice with Sylius optimizations.
  4. Integration with Forms

    {{ form_widget(form, { 'attr': {'class': 'form-control'} }) }}
    
    • Works seamlessly with Symfony Forms.

Advanced Patterns

  • 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
    

Gotchas and Tips

Pitfalls

  1. Locale Dependencies

    • The currency filter relies on Symfony’s Intl component. Ensure your server has ICU data installed:
      sudo apt-get install icu-devtools  # Debian/Ubuntu
      
    • Debug missing locales with:
      composer require symfony/intl
      
  2. Namespace Conflicts

    • Avoid naming custom extensions CurrencyExtension or DateExtension to prevent collisions with Sylius’s built-ins.
  3. Caching Issues

    • Clear Twig cache after adding new extensions:
      php bin/console cache:clear
      
  4. Sylius-Specific Assumptions

    • Some filters (e.g., currency) assume Sylius’s Money type. For vanilla Symfony, use Symfony’s Intl directly:
      {{ amount | format_currency('EUR') }}  {# Symfony 5.3+ #}
      

Debugging Tips

  • 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 %}
    

Extension Points

  1. Add Custom Filters Extend AbstractExtension and register the service:

    tags: ['twig.extension']
    
  2. Modify Currency Formatting Override the currency_formatter service or create a decorator:

    Sylius\TwigExtra\Formatter\CurrencyFormatter:
        decorates: sylius_twig_extra.currency_formatter
        arguments: ['@.inner']
    
  3. Localization Override translation files in translations/messages.en.yaml:

    currency:
        symbol: '$'  # Custom symbol for USD
    
  4. Performance For heavy templates, pre-compile Twig:

    php bin/console twig:compile
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky