Laravel Blade:@stop VS @show VS @endsection VS @append

Ber*_*t H 9 php laravel laravel-5 laravel-blade

在Laravel中,有不同的使用方法:

@yield('section1') // Filled in by child view

@section('section2')
    // Default content, can be overwritten by child
    // Different ways of closing the section
@endsection|stop|show|append
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这些之间究竟有什么区别?

根据这一点,@ stop和@endsection可能是相同的.(其中一个已被弃用,但现已不再使用)

apo*_*fos 14

@endsection并且@stop是相同的并表示一节的结尾.

在您执行之前,该部分实际上不会在页面上呈现 @yield('sectionname')

相比之下,@show相当于

@stop
@yield('sectionname')
Run Code Online (Sandbox Code Playgroud)

即它停止并立即在页面的该部分呈现该部分.

@append 基本上相当于:

//FileA.blade.php
@section('sectionname')
 ... content
@stop

//FileB.blade.php
@extends('fileA')

@section('sectionname')
    @parent
    ... more content after content
@stop
Run Code Online (Sandbox Code Playgroud)

这是一些相关的源代码:

protected function compileStop() {
    return '<?php $__env->stopSection(); ?>';
}
protected function compileEndsection() {
    return '<?php $__env->stopSection(); ?>'; //Same code
}

protected function compileShow() {
    return '<?php echo $__env->yieldSection(); ?>';
}
Run Code Online (Sandbox Code Playgroud)

Yield部分只是停止当前部分并产生其内容.


Gur*_*ngh 14

我可能会迟到。但在 Laravel 7.x 系列中,没有提到“@stop”和“@append”。

问:@endsection 和 @show 之间的区别

@endsection 指令只是告诉刀片引擎该部分实际结束的位置。要显示该部分,您需要使用 @yield 指令。如果您不屈服,则该剖面刀片在渲染视图后将不会显示它。

例如在布局视图中:

<!-- layout -->
<body>

    @section('content')
      Some Content
    @endsection

</body>
Run Code Online (Sandbox Code Playgroud)

上面的代码没有任何意义,当然我们定义了一个section。但它不会显示在客户端的视图中。所以我们需要生成它,使其在客户端上可见。因此,让我们以相同的布局生成它。

<!--layout-->
<body>

    @section('content')
        Some content
    @endsection
    @yield('content')

</body>
Run Code Online (Sandbox Code Playgroud)

现在上面的代码对客户端有一些意义,因为我们已经定义了一个部分并告诉 Blade 引擎以相同的布局生成它。

但 Laravel 提供了一种快捷方式,无需在同一布局中显式生成该部分,而是使用 @section - @show 指令对。因此上面的代码可以写成如下:

<!--layout-->
<body>

    @section('content')
        Some content
    @show

</body>
Run Code Online (Sandbox Code Playgroud)

所以@show只是@endsection和@yield指令的压缩版本。

我希望我把一切都说清楚了。还有一件事,在 laravel 7.x 中,要在该部分中附加内容,使用了 @parent 指令。