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

时间:2018-05-25 13:24:33

标签: 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

谁能告诉我这些之间的确切区别是什么?

编号this,@ stop和@endsection可能是相同的。 (其中一个已被弃用,但现已不再使用)

2 个答案:

答案 0 :(得分:11)

@endsection@stop相同,表示某个部分的结尾。

在您执行@yield('sectionname')

之前,该部分实际上并未在页面上呈现

相比之下,@show相当于

@stop
@yield('sectionname')

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

@append基本上相当于:

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

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

@section('sectionname')
    @parent
    ... more content after content
@stop

以下是一些相关的source code:

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

protected function compileShow() {
    return '<?php echo $__env->yieldSection(); ?>';
}

Yield部分只会停止当前部分并产生其内容。

答案 1 :(得分:1)

我可能参加聚会很晚。但是在Laravel 7.x系列中,没有提到“ @stop”和“ @append”。

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

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

例如在布局视图中:

<!-- layout -->
<body>

    @section('content')
      Some Content
    @endsection

</body>

上面的代码没有意义,我们当然已经定义了一个小节。但是它不会显示在客户端视图中。因此,我们需要让它在客户端上可见。因此,让我们在相同的布局中产生它。

<!--layout-->
<body>

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

</body>

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

但是Laravel提供了一个捷径,而不是使用@section-@show指令对来显式地产生相同布局中的该部分。因此,上面的代码可以编写如下:

<!--layout-->
<body>

    @section('content')
        Some content
    @show

</body>

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

我希望我把一切都弄清楚了。还有一件事,在laravel 7.x中将内容附加到本节中,使用了@parent指令。