6

尝试使用刀片模板实现简单的页面布局时,我得到一个无法解释的 FatalErrorException。我不确定这是我做错了什么还是 Laravel 是。我正在关注 L4 关于模板的文档的教程,我的代码似乎也遵循了它。这是我的代码。

应用程序/routes.php:

<?php
Route::get('/', 'HomeController@showWelcome');

应用程序/views/home/welcome.blade.php:

@extends('layouts.default')
@section('content')
  <h1>Hello World!</h1>
@stop

应用程序/视图/布局/default.blade.php:

<!doctype html>
<html>
  <head>
    <title>The Big Bad Barn (2013)</title>
  </head>
  <body>
    <div>
      @yield('content')
    </div>
  </body>
</html>

应用程序/控制器/HomeController.php:

<?php
class HomeController extends BaseController {
  protected $layout = 'layouts.default';
  public function showWelcome()
  {
    $this->layout->content = View::make('home.welcome');
  }
}

Laravel 只是抛出一个 FatalErrorException。输出错误页面显示“语法错误,意外'?'”。在 storage/views 目录中生成的文件刀片有 PHP,其中

<?php echo $__env->make('layouts.default')

<?php $__env->startSection('content', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>; ?>
<h1>Hello World!</h1>
<?php $__env->stopSection(); ?>
4

3 回答 3

8

昨天我遇到了同样的问题,但是其他答案并没有解决我的问题。您可能已经想通了,但也许这篇文章会阻止其他人像我一样花费大量时间来找出问题所在,而这只是一件小事(但令人沮丧!)。

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

于 2013-07-12T07:32:20.820 回答
1

您的控制器应该只是返回 View::make("home.welcome") 而不是将其附加到布局中。

然后欢迎视图调用布局,因此在这种情况下控制器只关心正文模板。

编辑以显示示例控制器:

class HomeController extends BaseController {
  public function showWelcome()
  {
    return View::make('home.welcome');
  }
}
于 2013-05-14T15:45:05.757 回答
1

埃里克已经给出了正确的答案,我只是想补充一下,如果你想使用

protected $layout = 'layouts.default';

在您的 HomeController 中,然后保持 showWelcome 动作不变并删除此行

@extends('layouts.default')

来自welcome.blade.php 文件。这也应该有效。

问候, 弗拉德

于 2013-05-14T19:35:22.730 回答