Laravel 刀片:你能产生一个默认的部分吗
Posted
技术标签:
【中文标题】Laravel 刀片:你能产生一个默认的部分吗【英文标题】:Laravel blade: Can you yield a default partial 【发布时间】: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')) 【参考方案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'))
【讨论】:
以上是关于Laravel 刀片:你能产生一个默认的部分吗的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 刀片视图中打破 foreach 循环?