[12.x] Pass flags to custom Json::$encoder #55548
Merged
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.
While reading through closed PR #55537, I realized one could use a custom JSON encoder for Eloquent's built-in casters, by providing a custom callable implementation using:
Then I remembered that, I recently migrated a project from Laravel 8, to Laravel 12, which uses a custom encoder, in a very similar fashion.
But as on Laravel 8, this class wasn't available (it was introduced on Laravel 10, by PR #46552), I ended up duplicating some of the built-in casters to make use of this encoder.
While reviewing the code to simplify it using this approach, I noticed my custom encoder accepts the
$flags
from the caster, which the built-in encoder does not.This PR:
Illuminate\Database\Eloquent\Casts\Json::encode()
method to pass the$flags
argument down to a user provided encoder.Note: the symmetric
Json::decode()
static method, already passes the$associative
argument down to a user provided decoder.