web-dev-qa-db-fra.com

Laravel - Commentaires de lame, le rendu de la lame provoquant le blocage de la page

Je suis en train de rendre une page qui est principalement un formulaire avec view::make dans Laravel et il se bloque, provoquant ERR_CONNECTION_RESET. Après une longue enquête et de nombreux harengs rouges, j'ai commencé à effacer (sans commenter) des sections aléatoires du fichier lame pour la vue et je me suis rendu compte que si 

a) effacez 2 des appels {{Form}} dans cette section du formulaire 

b) supprimez le {{-- and --}} autour de cette section du formulaire

    {{--
    <div class="form-row">
      {{ Form::label('foo', 'foo:') }}
      {{ Form::text('foo') }}
    </div>
    <div class="form-row">
      {{ Form::label('foo', 'foo:') }}
      {{ Form::text('foo') }}
    </div>
    <div class="form-row">
      {{ Form::label('foo', 'foo') }}
      {{ Form::text('foo') }}
    </div>
    --}}

la page sera rendue. Je ne sais pas quelle est exactement la cause ici. Il y a d'autres blocs en haut et en bas, bien qu'il s'agisse d'une section commentée en 3 divisions, ce qui n'est le cas des autres.

Quelqu'un a une idée de ce qui cause ça? Courir sur WAMP si cela compte.

13
z0d14c

Remarque: cette réponse a été donnée pour Laravel 4.2, mais doit toujours s'appliquer. Il existe des cas particuliers de problèmes de compilation Blade qui dépendent de la version de Laravel et/ou PHP, il est donc préférable d’utiliser les commentaires Blade uniquement pour les cas d’utilisation les plus simples. 

La solution consiste à utiliser uniquement les commentaires de lame pour de simples remarques ou à commenter des fonctions de lame à une ligne. Ne pas imbriquer le code Blade/PHP dans les commentaires Blade. Utilisez les commentaires de bloc PHP standard pour commenter plusieurs lignes de code dans un seul commentaire (PHP, HTML, plusieurs fonctions de lame, etc.).


Commentaires de lame valides:

Fonction de lame unique:

{{-- Form::text('foo') --}}

Remarque:

{{-- Form Section 1 --}}

Lame invalide Commentaires:

Syntaxe incorrecte:

{{-- Form::text('foo') --  }} 

"@" À l'intérieur du commentaire de la lame

{{-- @Form::text('foo') --}} 

PHP imbriqué:

{{-- <?php 
echo "foo";
echo "bar
?> --}} 

_ {Lame imbriquée: _

{{-- 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
--}} 

Utilisez plutôt PHP Bloquer les commentaires. Ils sont toujours utilisables dans un fichier blade.php

<?php /* 
{{ HTML::form("foo") }};
{{ HTML::form("bar") }};
*/ ?> 

Vous pouvez également commenter votre lame, ligne par ligne:

{{-- HTML::form("foo") --}};
{{-- HTML::form("bar") --}};

Internals:

Pour le code de l'OP, le compilateur lame de Laravel générera un fichier temporaire PHP contenant le code PHP/HTML suivant:

<?php /* 
    <div class="form-row">
      <?php echo Form::label('foo', 'foo:'); ?>

<?php echo Form::text('foo'); ?>

</div>
<div class="form-row">
    <?php echo Form::label('foo', 'foo:'); ?>

    <?php echo Form::text('foo'); ?>

</div>
<div class="form-row">
    <?php echo Form::label('foo', 'foo'); ?>

    <?php echo Form::text('foo'); ?>

</div>
*/ ?>

La lame à l'intérieur de vos commentaires de lame sont toujours en cours d'analyse en PHP. Les balises de fin PHP à l'intérieur du commentaire de bloc PHP entraînent la fin prématurée de l'analyseur Apache, ce qui entraîne des erreurs de PHP/HTML mal formées par le */ ?> pendant). 

?> sort du mode PHP et retourne en mode HTML. // et # ne peuvent pas influencer cela.

L'utilisation de l'un des commentaires de lame non valides susmentionnés entraînera des problèmes de compilation similaires. Évitez les commentaires sur Blade pour des raisons autres que des remarques ou des commentaires. Les fonctions de Blade s'affichent ligne par ligne.

20
TonyArra

J'ai le même problème avec laravel 5.1 et PHP 7 (nouveau Homestead). Le travail autour était d'utiliser ceci: 

<?php /* XXX */?>

au lieu de cela: 

{{-- XXX -- }}.
1
Yevgeniy Afanasyev

J'ai un symptôme similaire et il semble être lié à la longueur du commentaire seul. Je l'ai testé avec un commentaire ne contenant aucun code ni déclaration de lame PHP:

{{--
0123456789abcdef
0123456789abcdef
0123456789abcdef
--}}

J'ai continué à ajouter des copies de la ligne répétée jusqu'à ce qu'elle se bloque. Le commentaire a été suivi lexicalement par une instruction @if de la lame, et la <php if(...): ?> correspondante ne s'est pas retrouvée dans le modèle compilé, mais le <?php endif; ?> de fermeture a fait , ce qui a abouti à un modèle compilé non valide du point de vue de la syntaxe.

Il semble y avoir un bogue dans le compilateur lame et je le signalerai.

La solution consiste à scinder les commentaires de la lame longs avec -}} {{-.

1

J'ai essayé le 

PHP imbriqué:

{{-- <?php 
echo "foo";
echo "bar";
?> --}} 

@TonyArra

Tout en utilisant . Il ne commente pas le contenu et empêche la compilation en tant queHTML

et voici htmlsource {{-- foobar --}}

Qui j'ai

C'est parce que si vous voulez commenter le code php dans Blade

Essaye ça

<!-- @php echo 'hai'; @endphp -->

OR

<!-- <?php echo 'hai'; ?> -->

et essayer de voir la source de la page

0
Manojkiran.A

Les commentaires de lame comme celui-ci étaient le problème dans mon cas:

{{--    
    @if ($test)
        <div>something</div>
    @else
        <div>something else</div>
    @endif
--}}
0
Mladen Janjetovic