【问题标题】:Laravel blade: Can you yield a default partialLaravel 刀片:你能产生一个默认的部分吗
【发布时间】:2014-08-24 08:07:03
【问题描述】:

如果我在Laravel blade 中有一个名为RightSideBar.blade.php 的布局,则一个区域为yield('content'),另一个区域为yield('sidebar')

如果扩展RightSideBar 的视图没有section('sidebar'),是否有显示default partial 的内置方法?

我知道你可以通过 default 传递一个 value,只是想知道是否有办法将 default 设为部分。

【问题讨论】:

  • 真的很简单,尽管文档仅将默认值指定为字符串,但实际上您可以传递视图 @yield('sidebar', \View::make('defaultSidebar'))

标签: php laravel laravel-blade


【解决方案1】:

是的,你可以传递一个默认值

看着documentation

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

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

【讨论】:

  • 这是不正确的。要渲染一个部分,你不能只传递一个字符串,而是按照上面建议的@user3238419 执行 View::make(pathtoview)
  • 我认为 OP 已经提到他知道他可以按照评论中提到的那样做到这一点。我的回答错了吗,因为我将示例描述为字符串而不是刀片?
  • 是的,因为他明确表示:“我知道你可以默认传递一个值..”,而且问题是要求部分字符串,而不是纯字符串。
  • 这种方法的问题是 html 被转义
【解决方案2】:

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

@section('section')
    Default content
@show

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

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

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

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

@yield('customlayout')

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

@section('content')
    <p>Welcome</p>
@stop

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

@section('content')
    <p>Welcome</p>
@stop
@section('defaultlayout')
    <div>
        @yield('content')
    </div>
@stop

@stop 等同于@endsection。

【讨论】:

    【解决方案3】:

    虽然文档仅将默认值指定为字符串,但实际上您可以传递视图

    @yield('sidebar', \View::make('defaultSidebar'))
    

    【讨论】:

      【解决方案4】:

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

      @hasSection('sidebar')
          @yield('sidebar')
      @else
          @yield('default-sidebar')
      @endif
      

      【讨论】:

        【解决方案5】:

        Laravel 8 中测试:

        @yield 可以将默认内容作为第二个参数。可以是字符串也可以是视图文件

        // user-layout.blade.php
        @yield('header', View::make('layouts.header'))
        

        您现在可以使用section 覆盖此“标题”

        @section('header')
          <div>New Header</div>
        @endsection
        
        //// OR - you can also pass a view file as a second parameter //////
        
        @section('header', View::make('layouts.new-header'))
        

        【讨论】:

          猜你喜欢
          • 2014-09-15
          • 2015-12-03
          • 2015-03-09
          • 2014-12-24
          • 2020-11-16
          • 1970-01-01
          • 2019-05-16
          • 2016-11-01
          • 1970-01-01
          相关资源
          最近更新 更多