laravel 刀片包含错误 - 语法错误,意外

Posted

技术标签:

【中文标题】laravel 刀片包含错误 - 语法错误,意外【英文标题】:laravel blade include error - syntax error, unexpected 【发布时间】:2014-06-01 06:48:04 【问题描述】:

我在本地使用 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

它工作正常,我得到“你好!”

但是当通过添加这样的包含来更改我的布局时:

<!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') 之后忘记了;?&gt;,并在... render() 之后添加了两个;?&gt;。 我已经尝试了很多东西,但我现在真的没有任何线索。

更新1 我已经重新安装了一个新的 Laravel 和 guest 什么的,问题还是一样。没有@include 没关系,使用@include 我一次又一次地遇到同样的错误。

UPDATE2 和 问题已修复(感谢 @majimboo)! 这简直令人难以置信。 所有的故事都与代码无关。这是文本编辑器的问题:Windows 上的 Notepad++。由于未知原因,并且仅针对某些文件,它从“编辑/EOL 转换/Windows 格式”切换到“编辑/EOL 转换/Mac 格式”。显然,Laravel 根本没有 Mac 格式!因此,如果您在 Windows 上使用 Notepad++,请确保您有:'EOL 转换/windows 格式'

【问题讨论】:

要清楚,为什么你有一个单独的页脚的第二部分?因为看起来@include() 正在指定一个视图文件,但您似乎没有在其他任何地方引用该部分。(换句话说,请尝试从页脚文件中删除@section() 附件(例如,保留html内容)) 即使只有 HTML,我也有同样的错误。 :/ 好吧,我已经对这个问题投了赞成票,希望它能引起它需要的关注,因为我没有更多的想法了。 谢谢。这真的很奇怪。如果我删除@include,它会起作用,如果我把它放回去,我会遇到同样的错误。 @Peter 我添加了一个答案。请参阅daylerees.com/codebright/blade 了解更多信息。搜索include 【参考方案1】:

你有这个:

@section("testfooter")
    <div class="footer">2013-2014</div>
@show // <--

改成这样:

@section("testfooter")
    <div class="footer">2013-2014</div>
@stop // <--

【讨论】:

该死的。我也看到了,但不确定我是否正确。 嗨。我做了更改,删除了“app\storage\views”中的文件并再次尝试,但不幸的是,同样的错误仍然存​​在。 同时清除浏览器缓存。【参考方案2】:

问题出在被包含的文件中。

首先检查问题是否真的存在,删除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>

查看this 了解有关刀片的更多信息。


问题似乎是别的,我只是想分享一下,如果它可以帮助你:

我使用 Notepad++ 作为文本编辑器,但出于某种奇怪的原因 决定使用“MAC 格式”作为行尾 (EOL) 格式。 显然 Blade 框架无法应对这种情况。使用 转换函数(在 notepad++ 中:编辑 -> EOL 转换)进行转换 到 Windows 格式,它会工作得很好......

Arjen

【讨论】:

嗨。感谢您的回复。我只尝试了&lt;div class="footer"&gt;2013-2014&lt;/div&gt;testfooter.blade.php 中没有任何内容,但问题仍然存在。我已清除浏览器缓存并删除了 storage/views 中的文件。 @Peter Laravel 现在生成什么代码?变了吗? 您的示例有效。我添加了@yield('container') 并将您的代码用作布局并调用@extends("example") @section('container') &lt;h1&gt;Hello!&lt;/h1&gt; @stop 并且它工作!难以置信!我真的不明白为什么之前的代码不起作用。 @Peter 我添加了一些脚注,可能会有所帮助。对不起,如果我不能提供任何进一步的帮助。 @Peter 但如果它确实有帮助,如果您接受它作为答案,我也将不胜感激:) 美好的一天。【参考方案3】:

通常 Laravel 会很好地提示问题。问题可能出在您的 CSS 或 JS 包含语句中。首先确保你打开了 laravel 的调试模式。这是怎么做的。

    Config/app -> debug = true 在第 16 行 刷新出错的页面

我故意省略了 css 文件的关闭 ')'。 laravel FW 显示了该错误的位置,它会显示类似的错误。

希望对您有所帮助。

【讨论】:

【参考方案4】:

在我的情况下,问题是某些 PHP 中的未终止字符串与 Laravel 抱怨的文件完全不同的部分。我通过删除文件中的所有内容并逐行添加来消除它。

【讨论】:

以上是关于laravel 刀片包含错误 - 语法错误,意外的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Compact 可变刀片文件显示语法错误

Laravel 包含主刀片错误

刀片模板中的意外 endforeach

使用 foreach 更新 Laravel 错误:语法错误,意外 ' ' (T_STRING),期待 ']'

Laravel 5.4 路由中的双箭头错误(语法错误,意外的 '=>' (T_DOUBLE_ARROW))

与Laravel语法错误混淆:意外的'。 (对我来说似乎不错)