Laravel @section和@show忽略默认内容 - 为什么?

时间:2017-08-07 22:00:00

标签: php laravel laravel-5.4

我在使用更简单的系统(主要是WP和原始PHP)后,学习如何为Laravel编写代码。为此,我运行了最新版本并遵循Laravel 5的教程:

https://tutorials.kode-blog.com/laravel-blade-template

但是,我遇到了一个问题。我在扩展主版面部分,要求您在/resources/views/page.blade.php上创建一个文件,其中包含以下内容:

@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')

<p>This is appended to the master sidebar.</p>
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

位于/resources/views/layouts/master.blade.php的主布局包含以下内容:

<html>
    <head>
        <title>@yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

根据教程,在路由之后访问http://localhost/larashop/public/blade时的结果应该是以下几行:

This is the master sidebar.

This is appended to the master sidebar.

This is my body content.

然而,相反,我得到了:

This is appended to the master sidebar.

This is my body content.

由于某些原因,代码忽略了代码的This is the master sidebar.部分,或者将其替换为@section('sidebar')中的内容。我将添加代码处理正常,否则主模板中的<p></p><div></div>会显示在应有的位置。它只是侧边栏的默认内容。如果我将@show替换为@yield('sidebar'),它确实显示正常,但我真的很好奇这里发生了什么,如果由于某种原因我做错了。

我相信可能存在版本差异,因为本教程适用于5.0而我是5.4版本,但我无法找到任何指向变更内容和原因的内容,以及在我继续前进之前,我想知道这一点,因为我担心我会发现更多像这样的问题。

我已经发现教程和我的安装之间存在差异,即/app/Http/routes.php代替/routes/web.php,但很容易找到有关的信息。对于这个,我找不到任何东西,所以有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

在你的page.blade.php中


它应该是@yield('sidebar')而不是@section('sidebar')

答案 1 :(得分:0)

刚刚找到答案。如果这是因为Laravel版本之间的变化或教程是错误的,我不知道。问题,根据本教程:

https://laravel.com/docs/5.4/blade

侧边栏部分内page.blade.php是否缺少@parent。因此,该文件应为:

@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')

    @parent

    <p>This is appended to the master sidebar.</p>

@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

这样,该部分将首先呈现,包括其父部分的内容。