danilovl/static-container-twig-extension-bundle
Installation:
composer require danilovl/static-container-twig-extension-bundle
Ensure bundles.php includes the bundle (auto-registered in Symfony 8+).
First Use Case: Store data in a template and retrieve it in another:
{# templates/parent.html.twig #}
{{ static_container.set('user_id', app.user.id) }}
{# templates/child.html.twig #}
{{ static_container.get('user_id') }}
static_container.set(), static_container.get(), static_container.has().Global State Management:
Use static_container.set() in a parent template (e.g., base.html.twig) to pass data to child templates (e.g., modals, partials).
{# base.html.twig #}
{{ static_container.set('theme_color', '#3498db') }}
Conditional Data Sharing: Check existence before retrieval:
{% if static_container.has('user_id') %}
{{ static_container.get('user_id') }}
{% endif %}
Integration with Controllers: Pre-populate the container via a Twig extension or event listener:
// src/EventListener/StaticContainerListener.php
public function onKernelView(GET $event): void
{
$container = $event->getContainer();
$twig = $container->get('twig');
$twig->addGlobal('static_container', $container->get('static_container_twig_extension'));
}
{{ static_container.get('user_id')|int }}
static_container.clear() in logout routes or template teardowns.Thread Safety: The container is not thread-safe. Avoid concurrent writes in multi-threaded environments (e.g., Symfony Messenger workers).
Memory Leaks: Uncleared data persists across requests. Clear explicitly in critical paths:
{{ static_container.clear() }} {# After sensitive operations #}
Twig Debugging:
Overwritten keys silently replace old values. Use static_container.has() to verify:
{% if not static_container.has('key') %}
{{ static_container.set('key', default_value) }}
{% endif %}
{{ dump(static_container.getAll()) }}
php bin/console debug:container static_container_twig_extension
Custom Storage:
Override the default storage backend by implementing StaticContainerInterface and binding it in services.yaml:
services:
App\Service\CustomStaticContainer:
tags: ['static_container.storage']
Event-Driven Clearing: Listen to kernel events to auto-clear data:
// src/EventListener/ClearStaticContainerListener.php
public function onKernelTerminate(RequestEvent $event): void
{
$container = $event->getContainer();
$container->get('static_container_twig_extension')->clear();
}
Serialization:
For complex objects, implement __toString() or use serialize():
{{ static_container.set('user', serialize(app.user)) }}
{{ static_container.get('user')|unserialize }}
How can I help you explore Laravel packages today?