【问题标题】:Check if a section is defined in a view检查是否在视图中定义了部分
【发布时间】:2015-12-29 13:51:34
【问题描述】:

使用 Laravel,如何根据视图中是否定义特定部分来修改布局?

我知道如果该部分不存在,我可以有一些默认文本显示,但想象以下场景:

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

因此,如果我的视图定义了@section 'sidebar',那么这很好用。但是如果视图没有定义侧边栏,我不希望我的主要内容列是 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

但这似乎不起作用。任何人都可以提出替代方案吗?

谢谢!

【问题讨论】:

  • 您正在尝试使用 laravel-blade 解决 CSS 问题。这是错误的。

标签: laravel laravel-5 twitter-bootstrap-3 laravel-blade


【解决方案1】:

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

@if (!empty($__env->yieldContent('sidebar')))
   //It is defined
@endif

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

编辑

在 PHP 5.5 之前 empty() 不能直接作用于函数的结果,所以你可以使用 trim() 代替,像这样:

@if (trim($__env->yieldContent('sidebar')))
   //It is defined
@endif

【讨论】:

  • 当我尝试这个时,我得到错误“错误:不能在写上下文中使用方法返回值”
【解决方案2】:

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

@hasSection('title')
    <title>@yield('title') - {{ config('app.name') }}</title>
@else
    <title>{{ config('app.name') }}</title>
@endif

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2012-01-20
    • 2011-06-03
    • 2010-09-22
    相关资源
    最近更新 更多