Laravel blade:你能否产生一个默认的部分

use*_*419 20 php laravel laravel-blade

如果我在Laravel刀片中有一个名为RightSideBar.blade.php的布局,则一个区域产量('content')和另一个产量('sidebar').如果扩展RightSideBar的视图没有部分("侧边栏"),是否有内置方式显示默认部分?(我知道你可以默认传递一个值,只是想知道是否有一种方法可以使默认值为部分)

loz*_*Omr 31

是的,您可以传递默认值

文档

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

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


Zol*_*nci 13

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

@section('section')
    Default content
@show
Run Code Online (Sandbox Code Playgroud)

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

@section('customlayout')
    <article class="content">
        @yield('content')
    </article>
@show
Run Code Online (Sandbox Code Playgroud)

你可以看到@show和@ stop/@ endsection之间的区别:上面的代码相当于下面的代码:

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

@yield('customlayout')
Run Code Online (Sandbox Code Playgroud)

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

@section('content')
    <p>Welcome</p>
@stop
Run Code Online (Sandbox Code Playgroud)

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

@section('content')
    <p>Welcome</p>
@stop
@section('defaultlayout')
    <div>
        @yield('content')
    </div>
@stop
Run Code Online (Sandbox Code Playgroud)

@stop等同于@endsection.


Yev*_*yev 7

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

@hasSection('sidebar')
    @yield('sidebar')
@else
    @yield('default-sidebar')
@endif
Run Code Online (Sandbox Code Playgroud)


Yev*_*yev 5

Although the docs specifies a default only as a string you can in fact pass a view

@yield('sidebar', \View::make('defaultSidebar'))
Run Code Online (Sandbox Code Playgroud)