
Laravel 4 中 Blade 模板的 @extends、@section 等指令被原样输出为纯文本,通常是因为视图路径未正确定义或 Blade 引擎未生效;核心解决方法是确保 @extends 使用带目录前缀的完整视图路径(如 'layouts.app'),并验证文件扩展名、路由配置及服务器环境。
laravel 4 中 blade 模板的 `@extends`、`@section` 等指令被原样输出为纯文本,通常是因为视图路径未正确定义或 blade 引擎未生效;核心解决方法是确保 `@extends` 使用带目录前缀的完整视图路径(如 `'layouts.app'`),并验证文件扩展名、路由配置及服务器环境。
在 Laravel 4 中,Blade 模板引擎负责将 @extends('layout')、@section('content') 等语法编译为 PHP 代码并最终渲染为 HTML。若这些指令直接以字符串形式显示在页面上(例如显示为 @extends('layout') @section('content') Users!),说明 Blade 引擎根本未处理该文件——最常见且易被忽略的原因是 视图路径引用错误。
✅ 正确的视图路径写法
Blade 的 @extends 必须使用 点号分隔的逻辑路径,而非物理文件路径。例如:
-
❌ 错误(假设 layout.blade.php 位于 app/views/layouts/ 目录下):
@extends('layout') {{-- Laravel 无法定位,因未指明目录 --}} -
✅ 正确(明确指定 layouts 目录):
@extends('layouts.layout')
同理,若你的主布局文件名为 app.blade.php 并存放在 app/views/layouts/app.blade.php,则应写为:
@extends('layouts.app')
? Laravel 会自动将点号(.)转换为斜杠(/),并在 app/views/ 下查找对应 .blade.php 文件。因此 'layouts.app' → app/views/layouts/app.blade.php。
? 其他关键排查项
文件扩展名必须为 .blade.php
确保所有 Blade 模板文件以 .blade.php 结尾(如 home.blade.php),而非 .php 或 .html。Laravel 仅对 .blade.php 文件启用 Blade 编译。-
路由必须返回视图,而非直接输出文件
确保控制器或闭包中使用 View::make() 或 view()(Laravel 4.2+ 支持):// 正确:触发 Blade 编译 return View::make('users.index'); // 错误:直接输出原始文件内容(绕过 Blade) return Response::file(app_path().'/views/users/index.blade.php'); -
Web 服务器配置需支持 PHP 解析
使用 WAMP 时,请确认:- Apache 正确加载了 php_module;
- 访问的是 http://localhost/your-project/public/(而非项目根目录),因为 Laravel 的入口文件 public/index.php 才能启动框架并启用 Blade;
- .htaccess 文件存在且启用 mod_rewrite(确保 URL 路由正常,间接验证框架是否启动)。
-
缓存问题(较少见但需检查)
清除 Blade 缓存(尤其在修改 app/config/app.php 后):php artisan cache:clear php artisan view:clear
✅ 完整工作示例
文件结构:
app/
└── views/
├── layouts/
│ └── app.blade.php
└── users/
└── index.blade.php
app/views/layouts/app.blade.php:
<title>App</title>
@yield('content')
app/views/users/index.blade.php:
@extends('layouts.app') {{-- ✅ 正确路径 --}}
@section('content')
<h1>Users!</h1>
@stop
路由定义(app/routes.php):
Route::get('/users', function() {
return View::make('users.index'); // ✅ 触发 Blade 渲染
});
只要以上任一环节出错,Blade 就不会执行,@ 指令就会作为普通文本暴露在 HTML 中。请优先检查 @extends 的路径格式——这是 Laravel 4 新手最常踩的坑。
总结:Blade 不是“自动识别模板”的魔法,而是依赖精确的命名约定与框架生命周期介入。 正确使用点号路径、确保 .blade.php 扩展名、通过 View::make() 返回视图,三者缺一不可。











