Я использую Laravel 4 локально с EasyPHP 14.1. Я создал маршрут:
Route::get('/test', function() { return View::make('test'); });
макет (testlayout.blade.php):
<!doctype html> <html> <head> <title></title> </head> <body> <div class="container"> @yield('container') </div> </body> </html>
и вид (test.blade.php):
@extends("testlayout") @section('container') <h1>Hello!</h1> @stop
Он отлично работает, и я получаю «Привет!».
Но когда меняют свой макет, добавив include, вот так:
<!doctype html> <html> <head> <title></title> </head> <body> <div class="container"> @yield('container') </div> @include('testfooter') </body> </html>
с моим нижним колонтитулом (testfooter.blade.php):
@section("testfooter") <div class="footer">2013-2014</div> @show
У меня ошибка «синтаксическая ошибка, неожиданная» / «».
Код, созданный Laravel (найденный в app \ storage \ views), неверен:
<!doctype html> <html> <head> <title></title> </head> <body> <div class="container"> <?php echo $__env->yieldContent('container') </div> <?php echo $__env->make('testfooter', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>; ?> </body> </html>
Laravel забывает ;?>
После yieldContent('container')
и добавляет два ;?>
yieldContent('container')
... render()
. Я пробовал много вещей, но сейчас у меня нет никакой подсказки.
UPDATE1 Я переустановил новый Laravel и гость, что проблема остается прежней. Без @include это нормально, с @include у меня такая же ошибка снова и снова.
UPDATE2 и PROBLEM FIXED (спасибо @majimboo)! Это просто невероятно. Вся эта история не связана с кодом. Это проблема с текстовым редактором: Notepad ++ в Windows . По неизвестной причине и только для файлов somes он переключился с «редактирования / преобразования EOL / формат Windows» на «edit / EOL conversion / Mac format». И, судя по всему, Laravel не имеет формата Mac вообще! Итак, если вы используете Notepad ++ в Windows, убедитесь, что у вас есть: « EOL conversion / windows format »
проблема в том, что файл включен.
Сначала, чтобы проверить, действительно ли проблема, удалите все внутри testfooter.blade.php
затем откройте представление из браузера. Вы заметите, что больше нет ошибки.
Измените testfooter.blade.php
на:
<div class="footer">2013-2014</div>
удалите @section("testfooter")
… @show
.
Пример:
<!-- app/views/header.blade.php --> <h1>When does the Narwhal bacon?</h1> <!-- app/views/footer.blade.php --> <small>Information provided based on research as of 3rd May '13.</small>
Вы включаете его как:
<!-- app/views/example.blade.php --> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Narwhals</title> </head> <body> @include('header') <p>Why, the Narhwal surely bacons at midnight, my good sir!</p> @include('footer') </body> </html>
Проверьте это, чтобы узнать больше о лезвии.
Проблема, кажется, что-то еще, я просто хотел бы поделиться этим, если это может вам помочь:
Я использую Notepad ++ в качестве текстового редактора, и по какой-то странной причине он решил использовать формат «MAC» в качестве формата End-Of-Line (EOL). По-видимому, система Blade не справляется с этим. Используйте функцию преобразования (в блокноте ++: Редактировать -> Преобразование EOL), чтобы преобразовать в формат Windows, и он будет работать нормально …
Арьен
У вас есть следующее:
@section("testfooter") <div class="footer">2013-2014</div> @show // <--
Измените его так:
@section("testfooter") <div class="footer">2013-2014</div> @stop // <--
Обычно Laravel дает большой намек на проблему. Проблема может быть в ваших заявлениях о включении CSS или JS. Сначала убедитесь, что вы включили режим отладки laravel. Вот как это сделать.
Я намеренно оставляю закрытие ')' файла css. Laravel FW показал, где эта ошибка, и она покажет вам аналогичную ошибку.
Надеюсь, это поможет.
В моем случае проблема была неисчерпаемой строкой в некотором PHP в совершенно другой части файла, о которой жаловался Laravel. Я удалил его, удалив все в файле и добавив строки снова один за другим.
Проблема, которую я вижу, вы закрыли теги php дважды в одной области, но ни один в другой, попробуйте этот код
<?php echo $__env->yieldContent('container'); ?> </div> <?php echo $__env->make('testfooter', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>