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

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

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

б) удалите {{-- 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> --}} 

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

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

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

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


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

Функция Single 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 Block. Они все еще пригодны для использования в файле blade.php

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

Кроме того, закомментируйте свой Blade по одной строке за раз:

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

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

Для кода OP компилятор Laravel Blade будет генерировать временный файл 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 внутри ваших комментариев Blade все еще анализируется на PHP. Теги конца PHP в блоке-комментарии PHP приводят к тому, что парсер Apache заканчивается на ранней стадии, что приводит к некорректированному PHP / HTML, который может привести к сбою вашего соединения (вероятно, вызванного оборванными */ ?> ).

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

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

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

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

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

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

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

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

 <?php /* XXX */?> 

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

 {{-- XXX -- }}. 

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

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