Laravel - 检查@yield是否为空

use*_*318 34 php laravel laravel-4

如果@yield有内容,是否可以检查刀片视图?

我正在尝试在视图中分配页面标题:

@section("title", "hi world")
Run Code Online (Sandbox Code Playgroud)

所以我想查看主要的布局视图...类似于:

<title> Sitename.com {{ @yield('title') ? ' - '.@yield('title') : '' }} </title>
Run Code Online (Sandbox Code Playgroud)

cbo*_*gia 61

在Laravel 5中,我们现在有了一个hasSection可以在View立面上调用的方法.

您可以View::hasSection用来检查是否@yeild为空:

<title>
    @if(View::hasSection('title'))
        @yield('title')
    @else
        Static Website Title Here
    @endif
</title>
Run Code Online (Sandbox Code Playgroud)

这个条件是检查我们的视图中是否设置了标题名称的部分.

 

提示:我看到很多新工匠设置了这样的标题部分:

@section('title')
Your Title Here
@stop
Run Code Online (Sandbox Code Playgroud)

但你可以通过传入一个默认值作为第二个参数来简化这个:

@section('title', 'Your Title Here')
Run Code Online (Sandbox Code Playgroud)

 

hasSection方法于2015年4月15日添加.


2Fw*_*ebd 55

对于现在正在寻找的人(2018+),您可以使用:

@hasSection('name')
   @yield('name')
@endif
Run Code Online (Sandbox Code Playgroud)

请参阅:https://laravel.com/docs/5.6/blade#control-structures

  • 请注意,文档是在5.2和5.4之间的某个时候删除的,但是在5.5中又添加了。 (2认同)

Col*_*mes 38

可能有一个更漂亮的方法来做到这一点.但这就是诀窍.

@if (trim($__env->yieldContent('title')))
    <h1>@yield('title')</h1>
@endif
Run Code Online (Sandbox Code Playgroud)

  • 现在,“ hasSection”要好得多,您可以考虑编辑此答案。(请参阅:http://stackoverflow.com/a/36671780/2666094) (2认同)

Pat*_*ros 17

根据文档给出:

@yield('section', 'Default Content');
Run Code Online (Sandbox Code Playgroud)

输入您的主要布局,例如"app.blade.php","main.blade.php"或"master.blade.php"

<title>{{ config('app.name') }} - @yield('title', 'Otherwise, DEFAULT here')</title>
Run Code Online (Sandbox Code Playgroud)

并在具体的视图页面(刀片文件)中输入如下内容:

@section('title')
My custom title for a specific page
@endsection
Run Code Online (Sandbox Code Playgroud)

  • 不。OP 想要检查参数,以便他们可以在模板中添加“-”字符。此语法和答案并未涵盖它。 (2认同)

小智 10

@hasSection('content')
  @yield('content')
@else
  \\Something else
@endif
Run Code Online (Sandbox Code Playgroud)

请参阅 If 语句中的“节指令” - Laravel 文档


pas*_*der 6

您只需检查该部分是否存在:

if (isset($__env->getSections()['title'])) {

    @yield('title');
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以更进一步将这一小段代码打包到Blade扩展中:http://laravel.com/docs/templates#extending-blade

  • 这是为此做一个Blade扩展的代码 - 即`@ifSection('title')`:https://gist.github.com/davejamesmiller/6acf7aa12e084c67fc74 (3认同)