简短回答@yield
:除非您想做一些比提供默认值更复杂的事情,否则请始终使用string
。
长答案:无论何时扩展刀片模板,@yield和@section .. @show都可以选择性地被覆盖。你可以用@yield做的所有事情也可以用@section .. @show做,但反过来不行。这是他们的工作:
@yield('主要')
- 可以替换为@section('main') .. @endsection
- 可以提供默认字符串,但不提供 HTML!当未提供@section('main') .. @endsection时,默认字符串将显示在子刀片模板中。
@section('main') .. @show
- 可以替换为@section('main') .. @endsection
- 可以提供默认的 HTML 代码。当没有提供@section('main')时,默认的 HTML 代码将显示在子刀片模板中。
- 可以替换为@section('main')@parent .. @endsection并另外显示默认的 HTML 代码。
这里有一些例子:test.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<h1>This is a test</h1>
@yield('mainA')
@yield('mainB', 'This is the alternative 1')
@yield('mainC', '<p>This is the alternative 2</p>')
@yield('mainD', 'This is the alternative 3')
@section('testA')
@show
@section('testB')
This is the alternative 4
@show
@section('testC')
<p>This is the alternative 5</p>
@show
@section('testD')
<p>This is the alternative 6</p>
@show
</body>
</html>
这是另一个名为的文件testA.blade.php
,它扩展了另一个刀片文件:
@extends('test')
@section('mainD')
<div>
<p>First replacement!</p>
<hr>
</div>
@endsection
@section('testC')
<div>
<p>Second replacement!</p>
<hr>
</div>
@endsection
@section('testD')
@parent
<div>
<p>Additional content</p>
<hr>
</div>
@endsection
这就是结果: