blade模板必须放在resources/views/目录下,如users.index对应resources/views/users/index.blade.php;传数据推荐关联数组或with();输出用{{ }}转义防xss,仅可信html用{!! !!};修改后需php artisan view:clear清缓存。

Blade模板文件放在哪?路径写错就直接404
Blade模板必须放在 resources/views/ 目录下,Laravel才认。比如想渲染 users.index,就得有 resources/views/users/index.blade.php —— 少了 .blade.php 后缀,或者路径里用了反斜杠、大写字母(如 Users/Index.blade.php),view() 函数会静默失败或抛出 InvalidArgumentException。
- 子目录层级不限,但命名建议全小写 + 点号分隔,和
view()参数严格对应 -
resources/views/welcome.blade.php是默认存在的,可直接用return view('welcome');测试环境是否正常 - 不要把 Blade 文件放进
public/或app/下——它们不会被编译,也不会被路由识别
怎么传数据给Blade?别用 compact() 硬塞一堆变量
最常用的是关联数组方式:return view('posts.show', ['post' => $post, 'comments' => $comments]);。每个键名变成模板里的变量名,清晰可控。
-
with()链式调用适合单个变量:view('profile')->with('user', $user) -
compact()看似省事,但一旦变量名拼错或未定义,会报Undefined variable且堆栈不友好;调试时不如显式写清楚 - 大量数据建议封装成 View Composer 或使用
View::share()全局共享(如导航菜单),避免每个控制器重复传
Blade里怎么安全输出?{{ $content }} 和 {!! $content !!} 差在哪
{{ $content }} 默认 HTML 转义,防 XSS;{!! $content !!} 原样输出,危险操作。95% 的场景该用前者。
- 用户输入内容(表单提交、评论、标题)一律走
{{ }},哪怕你“确定它没标签”——前端不可信,过滤应在后端做 - 只在明确控制来源时用
{!! !!},比如后台富文本编辑器存的已过滤 HTML,且你确认过strip_tags()或HtmlSanitizer已介入 - Blade 指令如
@if、@foreach不涉及转义问题,但里面嵌套的变量仍需按规则处理
为什么修改了Blade却没生效?缓存不是玄学
Laravel 默认开启视图缓存,开发时若改了 .blade.php 文件但页面没变,大概率是缓存没清。
- 本地开发建议关掉缓存:
APP_DEBUG=true+ 运行php artisan config:clear和php artisan view:clear - 生产环境不能关,但部署后必须跑
php artisan view:cache,否则每次请求都重新编译,性能暴跌 - 注意:
view:clear只清storage/framework/views/下的编译文件,不清理 OPCache;PHP-FPM 环境下有时还需opcache_reset()或重启服务
{!! !!} 直接吐出来,问题往往不是报错,而是悄无声息地出错。









