- Add Anonymous Component support for 3rd-party bundles #2019
- Deprecate
cva
Twig function in favor ofhtml_cva
fromtwig/html-extra
#2144
- Add nested attribute support #1405
- Introduce CVA to style TwigComponent #1416
- Drop Twig 2 support #1436
- Fix full context is stored in profiler #1552
- Add CVA (Class variant authority) integration #1416
- Add the ability to render specific attributes from the
attributes
variable #1442 - Restrict Twig 3.9 for now #1486
- Build reproducible TemplateMap to fix possible post-deploy breakage #1497
- Make
ComponentAttributes
traversable/countable - Fixed lexing some
{# twig comments #}
with HTML Twig syntax - Fix various usages of deprecated Twig code
- [BC BREAK] Add component metadata to
PreMountEvent
andPostMountEvent
- Added configuration to separate your components into different "namespaces"
- Add
outerScope
variable reach variables from the parent template of an "embedded" component. - Deprecate calling
ComponentTemplateFinder
constructor withoutdirectory
argument. - Add profiler integration:
TwigComponentDataCollector
and debug toolbar templates - Add search feature in
debug:twig-component
command. - Fix inconsistencies with how
{% component %}
/<twig:component>
syntaxes are rendered vscomponent()
:PostRenderEvent
is now dispatched & the template resolution happens at runtime. - Fix priority of passed in props vs default props with anonymous components.
- Add Symfony 7 support.
- TwigPreLexer: improve performance.
- Fix twig:lint bug with anonymous component tag.
- Added a
debug:twig-component
command. - Fixed bad exception when the error comes from a Twig template.
- Fixed deprecation with
TemplateCacheWarmer
return type.
- Support ...spread operator with html syntax (requires Twig 3.7.0 or higher)
- Add support for anonymous Twig components.
- Add
RenderedComponent::crawler()
andtoString()
methods. - Allow a block outside a Twig component to be available inside via
outerBlocks
. - Fix
<twig:component>
syntax where an attribute is set to an empty value. - Add component debug command for TwigComponent and LiveComponent.
- The
ComponentAttributes::defaults()
method now accepts any iterable argument. TheComponentAttributes::add()
method has been deprecated. To add a Stimulus controller to the attributes, use{{ attributes.defaults(stimulus_controller('...')) }}
.
- Add new HTML syntax for rendering components:
<twig:ComponentName>
true
attribute values now render just the attribute name,false
excludes it entirely.- Add helpers for testing components.
- The first argument to
AsTwigComponent
is now optional and defaults to the class name. - Allow passing a FQCN to
ComponentFactory
methods.
PreMount
andPostMount
hooks can now return nothing.
-
[BC BREAK] The
PreRenderEvent
namespace was changed fromSymfony\UX\TwigComponent\EventListener
toSymfony\UX\TwigComponent\Event
. -
Add new autowireable
ComponentRendererInterface
-
Added
PostRenderEvent
andPreCreateForRenderEvent
which are dispatched just before or after a component is rendered. -
Added
PostMountEvent
andPreMountEvent
which are dispatched just before or after the component's data is mounted. -
Added Twig template namespaces - #460.
- Allow to pass stringable object as non mapped component attribute.
- Add embedded components.
- Allow
ExposeInTemplate
to be used on public component methods.
-
Make public component properties available directly in the template (
{{ prop }}
vs{{ this.prop }}
). -
Add
PreMount
priority parameter. -
Add
PostMount
hook component hook to intercept extra props. -
Add attributes system that takes extra props passed to
component()
and converts them into aComponentAttributes
object available in your template asattributes
. -
Add
PreRenderEvent
to intercept/manipulate twig template/variables before rendering. -
Add
ExposeInTemplate
attribute to make non-public properties available in component templates directly. -
Add Computed Properties system.
-
Support for
stimulus
version 2 was removed and support for@hotwired/stimulus
version 3 was added. See the @symfony/stimulus-bridge CHANGELOG for more details. -
Minimum PHP version was bumped to 8.0 so that PHP 8 attributes could be used.
-
The
ComponentInterface
was dropped and replaced by theAsTwigComponent
attribute. ThegetComponentName()
was replaced by aname
argument to the attribute.
Before:
use Symfony\UX\TwigComponent\ComponentInterface;
class AlertComponent implements ComponentInterface
{
public string $type = 'success';
public string $message;
public static function getComponentName(): string
{
return 'alert';
}
}
After:
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
#[AsTwigComponent('alert')]
class AlertComponent
{
public string $type = 'success';
public string $message;
}
-
If you're using a version lower than Symfony 5.3, you will need to manually tag all component services with
twig.component
. This is because Symfony 5.3 introduces autoconfiguration for PHP 8 attributes, which this library leverages. -
The template for a component can now be controlled via the
template
argument to theAsTwigComponent
attribute:
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
#[AsTwigComponent('alert', template: 'other/path/alert.html.twig')]
class AlertComponent
{
// ...
}
- The TwigComponent library was introduced!