Laravel - комментарии Blade, обработка клинка, приводящая к сбою страницы

Я обрабатываю страницу, которая в основном является формой с view::make в Laravel, и она сбой, вызывая ERR_CONNECTION_RESET. После долгого исследования и многих красных сельдей я начал стирать (не комментируя) случайные фрагменты из файла клинка для представления и понял, что если я

a) стереть 2 вызова {{Form}} внутри этого раздела формы

b) удалите {{-- and --}} из этого раздела формы

    {{--
    <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>
    --}}

страница будет отображаться. Я не уверен, в чем именно причина. Существуют и другие блоки выше и ниже, хотя это раздел с комментариями из 3-х разделов, который ни у кого из них нет.

Кто-нибудь знает, что вызывает это? Запуск на WAMP, если это имеет значение.

Ответ 1

Примечание: этот ответ был дан для Laravel 4.2, но он все равно должен применяться. Существуют некоторые особые случаи компиляции Blade, которые зависят от версии Laravel и/или PHP, поэтому лучше всего использовать комментарии Blade для простейших вариантов использования.

Решение состоит в том, чтобы использовать только комментарии Blade для простых замечаний или комментировать однолинейные функции Blade. Не вставляйте Blade/PHP-код внутри комментариев Blade. Используйте стандартные комментарии блоков PHP, чтобы прокомментировать несколько строк кода в одном комментарии (PHP, HTML, несколько функций лезвия и т.д.).


Действительные комментарии Blade:

Функция одиночного клинка:

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

Примечание:

{{-- Form Section 1 --}}

Недопустимые комментарии Blade:

Неправильный синтаксис:

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

"@" Внутри комментария Blade

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

Вложенный PHP:

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

Вложенные клинки:

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

Вместо этого используйте комментарии блоков PHP. Они все еще пригодны для использования в файле blade.php

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

Альтернативно, закомментируйте свой Blade по одной строке за раз:

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

Внутренности:

Для кода OP Laravel Blade Compiler создаст временный PHP файл, содержащий следующий PHP/HTML:

<?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>
*/ ?>

Блейд внутри ваших комментариев Blade все еще анализируется на PHP. Теги конца PHP в блоке-комментарии PHP приводят к тому, что парсер Apache заканчивается раньше, в результате чего возникает плохо сформированный PHP/HTML, который может сбой вашего соединения (вероятно, вызванный оборванным */ ?>).

? > выходит из режима PHP и возвращается в режим HTML, а//или # не может повлиять на это.

Использование любого из вышеупомянутых недопустимых комментариев Blade приведет к подобным проблемам компиляции. Избегайте комментариев Blade для чего-либо, кроме замечаний или комментирующих функции Blade из одной строки за раз.

Ответ 2

У меня подобный симптом, и он, похоже, связан с длиной комментария. Я протестировал его с комментарием, который вообще не содержит каких-либо инструкций PHP или блейдов:

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

Я продолжал добавлять копии повторяющейся строки, пока она не разбилась. Комментарий лексически сопровождался инструкцией лезвия @if, а соответствующий <php if(...): ?> не попадал в скомпилированный шаблон , но закрытие <?php endif; ?> выполняло, что приводило к синтаксически недействительному скомпилированному шаблону.

Кажется, это ошибка в компиляторе лезвия, и я сообщу об этом.

Обходной путь состоит в том, чтобы разделить длинные клики с помощью -}} {{-.

Ответ 3

У меня такая же проблема с laravel 5.1 и PHP 7 (новая усадьба). Обход должен был использовать это:

<?php /* XXX */?>

вместо этого:

{{-- XXX -- }}.

Ответ 4

Комментарии Blade, подобные этой, были проблемой в моем случае:

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

Ответ 5

Я попробовал

Вложенный PHP:

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

@TonyArra

При использовании. Он не комментирует содержимое и не позволяет компилировать как HTML

Это потому, что если вы хотите прокомментировать PHP-код внутри Blade

Попробуй это

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

ИЛИ ЖЕ

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

и попробуйте просмотреть страницу источника