You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade中@yield无法加载header区块的问题排查

排查Laravel Blade中Header区块不显示的问题

嘿,这个坑我之前踩过!咱们先把Blade模板继承的核心逻辑理清楚:父模板(也就是你的layout.blade.php)得先定义好可填充的区块(用@yield),子模板(比如add-listing)通过@extends继承父模板,再用@section去填充对应的区块。你的header区块没显示,大概率是下面几个环节出了问题,一个个来:


1. 父模板layout里没给header留位置!

这是最常见的原因!你得先打开layout.blade.php,看看页面顶部(或者你想放header的位置)有没有写@yield('header')。举个正确的layout示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>@yield('title')</title>
</head>
<body>
    <!-- 这里必须有header区块的占位符 -->
    @yield('header')

    <!-- 这是body区块的占位符 -->
    @yield('body')

    <footer>
        版权所有 © 2024
    </footer>
</body>
</html>

如果layout里根本没写@yield('header'),哪怕你在别的模板里把header内容写得再完美,也没地方渲染出来,自然看不到。


2. header.blade.php的用法搞错了:它不该单独继承layout!

你说header.blade.php继承layout并定义header区块——这里明显是概念混淆啦!header只是页面的一个局部片段(比如导航栏),它不需要单独去继承layout,而是应该直接写header的HTML内容,或者包裹在@section('header')里,然后在add-listing.blade.php里用@include引入它,或者直接把header内容写在add-listing的@section('header')里。

给你两种正确的写法参考:

写法一:把header作为局部视图引入

  • header.blade.php(不需要@extends,直接写内容):
<nav class="main-nav">
    <a href="/">首页</a>
    <a href="/listings">所有列表</a>
    <a href="/listings/create">添加列表</a>
</nav>
  • add-listing.blade.php:
@extends('layout')

@section('header')
    @include('header') <!-- 把header局部视图引入到header区块里 -->
@endsection

@section('body')
    <!-- 你的添加列表表单内容 -->
    <form method="POST" action="/listings">
        @csrf
        <input type="text" name="title" placeholder="标题">
        <!-- 其他表单字段 -->
        <button type="submit">提交</button>
    </form>
@endsection

写法二:直接在add-listing里写header区块

如果header内容不多,也可以直接在add-listing里写:

@extends('layout')

@section('header')
    <nav class="main-nav">
        <a href="/">首页</a>
        <a href="/listings">所有列表</a>
    </nav>
@endsection

@section('body')
    <!-- 表单内容 -->
@endsection

要是你硬让header.blade.php继承layout,它会生成一个独立的完整页面,根本不会嵌入到add-listing的页面里——这就导致header的内容完全没被加载到当前请求中,自然看不到。


3. add-listing里压根没填充header区块

如果layout里有@yield('header'),但你在add-listing.blade.php里只写了@section('body'),完全没处理header区块,那这个区块要么显示@yield的默认值(比如@yield('header', '默认header')),要么就是空的,自然看不到内容。


4. 偶尔碰到的模板缓存问题

Laravel会缓存编译后的Blade模板,如果你之前修改过layout或者模板结构,旧的缓存可能没更新。可以跑一下这个命令清除缓存:

php artisan view:clear

然后刷新页面试试,说不定就好了。


总结一下,最可能的问题是layout里没加header的@yield占位符,或者header模板的用法错误(不该单独继承layout)。先检查这两点,应该就能解决问题啦!

内容的提问来源于stack exchange,提问作者i am batman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:34:10