在老式的 Laravel 刀片模板中,我们曾经以@section('section-name')
以下方式使用:
{{-- h1para.blade.php --}}
<h1>
@section('heading')
Heading from Template
@endsection
</h1>
<p>
@yield('details')
</p>
然后扩展该模板:
{{-- content.blade.php --}}
@extends('h1para')
@section('details')
Content from content page
@endsection
在上面,我渲染的 HTML 输出如下所示,因为'heading'
扩展文件中的“缺失”部分意味着我们默认返回模板中的内容:
<h1>Heading from Template</h1>
<p>Content from content page</p>
但是在新的组件做事方式中,我这样做:
{{-- .../components/h1para.blade.php --}}
<h1>{{ $heading }}</h1>
<p>{{ $slot }}</p>
如果您还没有收集,问题是:如何为插槽的内容设置默认值,这样如果扩展组件/模板中未提供它,它会回退到该默认值?
(我已经完成了搜索,但无法找到之前提出的相同问题)
编辑:
我应该补充一点,我已经看到了解决方案(在 Laravel 文档中):
<h1>{{ $heading ?? 'Default Heading Here' }}</h1>
但这似乎只有在默认值是一个易于管理的短字符串时才合适。如果默认值是一个长的 HTML 流,那么它就不能满足我的需要。
编辑2:
重申一下:问题的重点是默认内容可能是一长串 HTML。通过传入一个字符串(无论是否格式化为 HTML)来解决问题并不适合我的实际需求。