使用Laravel,如何根据视图中是否定义了特定部分来修改布局?
我知道如果该部分不存在,我可以显示一些默认文本,但想象一下以下情况:
<div class="row">
<div class="col-sm-9">
@yield('content')
</div>
<div class="col-sm-3">
@section('sidebar')
@show
</div>
</div>
因此,如果我的视图定义了@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
然而,这似乎不起作用。有人可以提出替代方案吗?
谢谢!
答案 0 :(得分:15)
Laravel 5.2添加了一个@hasSection
指令,它完全符合您的要求。
由于某种原因,在5.3或5.4文档中没有提到它。
@hasSection('title')
<title>@yield('title') - {{ config('app.name') }}</title>
@else
<title>{{ config('app.name') }}</title>
@endif
答案 1 :(得分:6)
您可以使用它来判断是否定义了某个部分:
@if (!empty($__env->yieldContent('sidebar')))
//It is defined
@endif
$__env->yieldContent()
返回指定节的内容,如果未定义或为空则返回空字符串。
修改强>
在PHP 5.5之前empty()
不能直接使用函数的结果,所以你可以改用trim()
,如下所示:
@if (trim($__env->yieldContent('sidebar')))
//It is defined
@endif