26

如果我有一个布局调用RightSideBar.blade.phpLaravel blade一个区域yield('content')和另一个yield('sidebar')

default partial如果正在扩展的视图RightSideBar没有a ,是否有内置的方式来显示a section('sidebar')

我知道您可以默认传递一个,只是想知道是否有办法将默认设置为部分。

4

5 回答 5

49

是的,您可以通过默认值

文档

@yield('sidebar', 'Default Content');

当子模板没有时,它基本上会放置一个默认输出@section('sidebar')

于 2014-07-04T16:41:28.603 回答
20

大多数时候我们想要多行默认内容,我们可以使用这个语法:

@section('section')
    Default content
@show

例如我在模板文件中有这个:

@section('customlayout')
    <article class="content">
        @yield('content')
    </article>
@show

你可以看到@show和@stop/@endsection的区别:上面的代码等价于下面的代码:

@section('customlayout')
    <article class="content">
        @yield('content')
    </article>
@stop

@yield('customlayout')

在其他视图文件中,我可以只设置内容:

@section('content')
    <p>Welcome</p>
@stop

或者我也可以设置不同的布局:

@section('content')
    <p>Welcome</p>
@stop
@section('defaultlayout')
    <div>
        @yield('content')
    </div>
@stop

@stop 等同于@endsection。

于 2015-09-09T15:43:55.263 回答
13

尽管文档仅将默认值指定为字符串,但实际上您可以传递视图

@yield('sidebar', \View::make('defaultSidebar'))
于 2019-04-09T23:06:01.970 回答
8

Laravel 5.2 添加了一个@hasSection指令来检查视图中是否定义了一个部分。由于某种原因,5.3 或 5.4 文档中没有提到它。

@hasSection('sidebar')
    @yield('sidebar')
@else
    @yield('default-sidebar')
@endif
于 2019-04-09T23:12:12.197 回答
1

Laravel 8中测试:

@yield可以将默认内容作为第二个参数。它可以是字符串或视图文件

// user-layout.blade.php
@yield('header', View::make('layouts.header'))

您现在可以使用section

@section('header')
  <div>New Header</div>
@endsection

//// OR - you can also pass a view file as a second parameter //////

@section('header', View::make('layouts.new-header'))
于 2022-01-01T09:53:08.413 回答