[5.5] Prevent Blade from parsing Blade code inside the @php and @endphp blocks #20065
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.
I realised Blade is parsing "template code" inside
@php
and@endphp
tags.For example this:
@php echo "{{ This is a blade tag }}" @endphp
Is compiled to:
<?php echo "<?php echo e(This is a blade tag); ?>" ?>
So with this PR I'm treating the
@php
and@endphp
the same as the verbatim blocks, to prevent the code inside from being compiled by Blade.Single
@php
tags with expression are still allowed, but I removed the compilation of individual@endphp
as that doesn't make sense.I have noticed there is a slight breaking change as the string
@php
inside a string in a Blade tag will now produce a different result:{{ 'Im afraid this will @php end badly' }} @endphp
Now:
{{ 'Im afraid this will <?php end badly' }} ?>
Before:
<?php echo e('Im afraid this will <?php end badly'); ?> ?>