如何在Laravel中应用DRY原理重复刀片模式?

时间:2017-11-23 06:32:18

标签: php laravel laravel-5 laravel-blade

我在下面的示例blade模式中重复了两次。我想知道如何才能应用DRY原则。它位于@foreach循环内,因此每个视图生成20次。我不想使用@include,因为我认为在每次调用时都会将所有不必要的变量传递给包含文件(也重复20次)。

由于下面的模式,我有多达1000行blade个文件。这是正常的,还是我可以为此做些什么。

感谢。

@foreach ($posts as $post)
    ...
    <div class="post-header">
        {{ mb_convert_case(str_replace('i', 'İ', $post->user->first_name), MB_CASE_TITLE) }} has posted, 

        @if($nhits)
            @if(isset($nhits[$post->id]))
                it has {{ $nhits[$post->id] }} hits,
            @endif
        @endif

        @if($post->likings->count())
            @if($post->likings->count())
                {{ $post->likings->count() }} persons liked it, 
            @else
                nobody liked it,
            @endif
        @endif

        @if($post->comments->count())
            {{ $post->comments->count() }} comments received.
        @else
            no comments yet.
        @endif
    <div>
    ...
@endforeach

2 个答案:

答案 0 :(得分:0)

如果每次渲染视图时都希望将相同的数据绑定到视图,视图编辑器可以帮助您将该逻辑组织到一个位置。通常引用的示例用例是博客中的侧边栏或标题中的使用配置文件信息。

  1. 在服务提供商中注册视图作曲家
  2. 定义作曲家类
  3. 您还可以通过将视图数组作为第一个参数传递给composer方法,一次将视图编辑器附加到多个视图。

      

    视图组合器是在呈现视图时调用的回调或类方法。如果每次渲染视图时都希望将数据绑定到视图,则视图编辑器可以帮助您将该逻辑组织到一个位置。

    来自Laravel文档:https://laravel.com/docs/5.5/views#view-composers

答案 1 :(得分:0)

如果每个视图中的数据不同,您可以使用组件和广告位

来自Laravel文档:https://laravel.com/docs/5.5/blade#components-and-slots

创建可重用的组件以在整个应用程序中重用

<!-- /resources/views/alert.blade.php -->

<div class="alert alert-danger">
    {{ $slot }}
</div>

在刀片视图中构建组件

<div class="alert alert-danger">
<div class="alert-title">{{ $title }}</div>
    {{ $slot }}
</div>

注入数据

@component('alert')
    @slot('title')
        Forbidden
    @endslot

    You are not allowed to access this resource!
@endcomponent

将数据数组中的其他数据作为@component指令的第二个参数传递。所有数据都将作为变量提供给组件模板。

@component('alert', ['foo' => 'bar'])
    ...
@endcomponent