[10.x] Fix kebab-case attributes not passed to children component data #49146
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #48956.
Today, when doing
<x-test {{ $attributes }} />
, kebab-cased attributes are ignored (for component class constructor parameters and anonymous component@props
)Class components
For compiled class components I have added
->toProps()
to attributes array which convert attribute names to camelCase (diff). Kebab-case attributes are now passed to component constructor parameters. I have updated a test case to assert the data passed toComponent::resolve()
method.Anonymous components
For anonymous components I have updated the
data()
method to transform attributes name to camelCase. I have added a test case for this method.Attributes cleaning
In compiled component tags, I changed
except()
toexceptProps()
to remove kebab-case attributes based on component constructor parameters (diff). I have updated a test case withuser-id
instead ofuserId
to ensure kebab-case attributes are removed.Naming considerations
The new
ComponentAttributeBag::toProps()
method may be not explicit enough, I can rename it if needed.