[11.x] Don’t serialise virtual properties in SerializesModels
#53898
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.
With the introduction of property hooks in php 8.4, developers now have the ability to create virtual properties. As these properties are in fact virtual, I believe they may be excluded from being serialised in
Illuminate\Queue\SerializesModels
.With the current implementation, read-only virtual properties will fail when trying to set their value when unserialising an instance. Excluding virtual properties from serialisation should solve this.
Note
I couldn't find test coverage for the specific cases defined in
SerializesModels
(such as excluding static or uninitialised properties), so I'm not 100% sure how this would be tested. Any feedback or guidance is welcome.Backwards compatibility
As virtual properties were introduced in php 8.4 and Laravel currently supports anything above 8.2, this implementation first checks whether the
isVirtual()
method exists onReflectionProperty
. This should ensure these changes don't breakIlluminate\Queue\SerializesModels
on earlier php versions.