包含视图
现在我们已经建立了基础的继承结构,接下来我们可以使用更多的技巧了.
@include
如果我们在一个视图内想嵌入另外的视图怎么做呢?也许我们有个"注册按钮"想在整个站点内使用,或许我们想在我们每次使用这个按钮的时候都可以进行自定义呢?请看示例4-10
<!-- resources/views/home.blade.php -->
<div class="content" data-page-name="{{ $pageName }}">
<p>Here's why you should sign up for our app:
<strong>It's Great.</strong>
</p>
@include('sign-up-button', ['text' => 'See just how great it is'])
</div>
<!-- resources/views/sign-up-button.blade.php -->
<a class="button button--callout" data-page-name="{{ $pageName }}">
<i class="exclamation-icon"></i>
{{ $text }}
</a>
@include引入视图并可以给它传递数据,注意你不但可以通过@include第二个参数显示的传递数据,也可以通过包含可用变量传递(例如$pageName),但是为了清晰,我建议总是显示的传递变量.
你也可以使用@includeIf,@includeWhen,以及@includeFirst指令,如例子4-11所示
{{-- Include a view if it exists --}}
@includeIf('sidebars.admin', ['some' => 'data'])
{{-- Include a view if a passed variable is truth-y --}}
@includeWhen($user->isAdmin(), 'sidebars.admin', ['some' => 'data'])
{{-- Include the first view that exists from a given array of views --}}
@includeFirst(['customs.header', 'header'], ['some' => 'data'])
@each
有些情况你希望循环include某些模板,这就是@each要干的事.
假设我们有一个由模块组成的侧边栏,我们希望包含多个模块,每个模块都有不同的标题。请看示例4-12
<!-- resources/views/sidebar.blade.php -->
<div class="sidebar">
@each('partials.module', $modules, 'module', 'partials.empty-module')
</div>
<!-- resources/views/partials/module.blade.php -->
<div class="sidebar-module"> <h1>{{ $module->title }}</h1>
</div>
<!-- resources/views/partials/empty-module.blade.php -->
<div class="sidebar-module"> No modules :(
</div>
回顾一下@each语法。 第一个参数是视图部分的名称。 第二个是迭代的数组或集合。 第三个是变量名,每个项(在本例中,$ modules数组中的每个元素)将传递给视图。 并且可选的第四个参数用于显示数组或集合是否为空的视图(或者,可选地,您可以在此处传递将用作模板的字符串)
Last updated
Was this helpful?