在刀片模板中组织组件的最佳方法

时间:2018-06-20 14:09:49

标签: php laravel laravel-blade

让我说我有一个博客,上面有不同的帖子和评论。现在,我想在网站的不同页面上显示帖子。在大多数教程中,它们都是这样的:

@foreach ($posts as $post)
    <div class="post">
      <h2>{{$post->title}}</h2>
      [...]
    </div>
@endforeach

当您只有一页要在其中显示帖子时,这似乎很好。但是,如果您有多个页面具有相同的组件怎么办?当然,您可以使用Blades @component函数。但是这种方法的性能如何?

假设我要在多个区域显示帖子。也许我的帖子有多个视图变体。这样可以吗?

index.blade.php

@extends('layouts.app')

@section('content')
    @component("section")
       @foreach ($posts as $post)
           @component("post", ["post" => $post])@endcomponent
       @endforeach
    @endcomponent

    @component("section")
       @foreach ($posts as $post)
           @component("post[highlight]", ["post" => $post])@endcomponent
       @endforeach
    @endcomponent
@endsection

section.blade.php

<section>{{ $slot }}</section>

post.blade.php

<div class="post {{css}}">
    <h2>{{$post->title}}</h2>
    [...]
</div>

发布[突出显示] .blade.php

@component("post", ["post" => $post, "css" => "highlight"])@endcomponent

这将减少依赖性,并且模板将是干净的。但是在我看来,这不是组织刀片模板的常用方法。

1 个答案:

答案 0 :(得分:0)

我建议您在section.blade.php中进行循环,并且每次使用时都可以重复访问帖子列表 @component('section') ... @endcomponent

如果您想使用该组件以不同的布局加载不同的列表,最好的使用方法是@slot():

@slot('post') ... @endslot

现在,该插槽在组件刀片文件(即(section.blade.php))中需要$ post变量。您应该设法从循环中返回$ post变量。

这可能会有助于components and slots