检查视图中是否定义了部分

Lan*_*nar 6 laravel twitter-bootstrap-3 laravel-5 laravel-blade

使用Laravel,如何根据视图中是否定义了特定部分来修改布局?我知道如果该部分不存在,我可以有一些默认文本显示,但想象一下以下场景:

<div class="row">  
     <div class="col-sm-9"> 
         @yield('content')
     </div>
     <div class="col-sm-3">
         @section('sidebar')
         @show
     </div>
</div>
Run Code Online (Sandbox Code Playgroud)

因此,如果我的视图定义了@section'侧边栏',那么效果很好.但是如果视图没有定义侧边栏,我不希望我的主要内容列是col-sm-9,我希望它是col-sm-12.我希望我能做到这样的事情:

@if(@section('sidebar'))
    <div class="row">  
        <div class="col-sm-9"> 
            @yield('content')
        </div>
        <div class="col-sm-3">
            @section('sidebar')
            @show
        </div>
    </div>
@else
    <div class="row">  
        <div class="col-sm-12"> 
            @yield('content')
        </div>
    </div>
@endif
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用.有人可以建议替代方案吗?

谢谢!

bla*_*ade 21

Laravel 5.2添加了一个@hasSection完全符合您要求的指令.由于某种原因,在5.3或5.4文档中没有提到它.

@hasSection('title')
    <title>@yield('title') - {{ config('app.name') }}</title>
@else
    <title>{{ config('app.name') }}</title>
@endif
Run Code Online (Sandbox Code Playgroud)


Dro*_*own 6

您可以使用它来判断是否定义了某个部分:

@if (!empty($__env->yieldContent('sidebar')))
   //It is defined
@endif
Run Code Online (Sandbox Code Playgroud)

$__env->yieldContent() 返回指定节的内容,如果未定义或为空,则返回空字符串.

编辑

在PHP 5.5之前empty() 不能直接使用函数的结果,所以你可以使用trim(),如下所示:

@if (trim($__env->yieldContent('sidebar')))
   //It is defined
@endif
Run Code Online (Sandbox Code Playgroud)