在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可能是相同的。 (其中一个已被弃用,但现已不再使用)
答案 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指令。