Laravel-Blade-Check für jeden leer

Lesezeit: 5 Minuten

Benutzer-Avatar
Sam

Ich möchte überprüfen, ob mein foreach leer ist, sodass das grundlegende HTML-Markup nicht ohne Ergebnisse angezeigt wird. Ich versuche, es in eine if-Anweisung zu packen und dann, wenn es leer ist, nichts anderes zu tun, um die Foreach-Schleife zu durchlaufen.

@if ($status->replies === '')

@elseif
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>
@endif

@if (!(empty($status->replies))
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <div class="media">
            <a class="pull-left" href="https://stackoverflow.com/questions/32652818/{{ route("profile.index', ['username' => $reply->user->username]) }}">
                <img class="media-object" alt="{{ $reply->user->getNameOrUsername() }}" src="{{ $reply->user->getAvatarUrl() }}">
            </a>
            <div class="media-body">
                <h5 class="media-heading"><a href="https://stackoverflow.com/questions/32652818/{{ route("profile.index', ['username' => $reply->user->username]) }}">{{ $reply->user->getNameOrUsername() }}</a></h5>
                <p>{{ $reply->body }}</p>
                <ul class="list-inline list-replies">
                    <li>
                        <a href="https://stackoverflow.com/questions/32652818/{{ route("status.like', ['statusId' => $reply->id]) }}"><i class="fa fa-thumbs-up"></i></a>
                    {{ $reply->likes->count() }} {{ str_plural('like', $reply->likes->count()) }}</li>
                    <li>{{ $reply->created_at->diffForHumans() }}</li>
                </ul>
            </div>
            <hr>
        </div>
    @endforeach
</div>
@endif

  • Wenn $status->replies leer ist, warum nicht mit testen leer()?… @if (empty($status->replies)) Anstatt anzunehmen, dass es eine Zeichenfolge ist, wenn es leer ist?

    – Markus Bäcker

    18. September 2015 um 13:09 Uhr


Benutzer-Avatar
cre8

Überprüf den Dokumentation für das beste ergebnis:

@forelse($status->replies as $reply)
    <p>{{ $reply->body }}</p>
@empty
    <p>No replies</p>
@endforelse

  • Es mag alt sein, aber meine Güte, ich muss jetzt so viel Code umschreiben! Ich hatte keine Ahnung, dass es das gibt!

    – Nahbyr

    25. März 2018 um 22:46 Uhr

  • Goldene Antwort auf diesen Kerl!

    – Kray

    12. Februar 2020 um 5:28 Uhr

  • Übrigens funktioniert dies nicht zum Rendern von Tabellen, da Sie eine Tabelle ohne Zeilen (oder mit einer einzelnen Zeile) mit einem Absatz darin erhalten – während Sie überhaupt keine Tabelle plus einen Absatz benötigen

    – warum

    14. Januar 2021 um 1:12 Uhr


  • Immer noch nützlich für mich.

    – Masiorama

    17. März um 10:49 Uhr

Ich denke, Sie versuchen zu überprüfen, ob das Array leer ist oder nicht. Sie können folgendermaßen vorgehen:

@if(!$result->isEmpty())
     // $result is not empty
@else
    // $result is empty
@endif

Bezug ist leer()

  • nicht immer darf man verwenden @forelse (zB zum Rendern nicht leerer Tabellen). darf man auch nicht verwenden @empty (auch nicht empty($collection)!) mit leeren Sammlungen. die von Ihnen vorgeschlagene Lösung bleibt der letzte Ausweg! Danke!

    – warum

    14. Januar 2021 um 1:09 Uhr


Benutzer-Avatar
iain

Sie sollten empty() verwenden

@if (!empty($status->replies)) 

<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>

@endif

Sie können count verwenden, aber wenn das Array größer ist, dauert es länger, wenn Sie nur wissen müssen, ob es leer ist, ist leer besser zu verwenden.

  • Vielen Dank für Ihre Antwort mit dieser Methode. Ich erhalte die folgende Fehlermeldung – syntax error, unexpected ':', expecting '('

    – Sam

    18. September 2015 um 13:22 Uhr

  • aktualisierter erster Beitrag mit vollständigem Code, wenn ich die if-Anweisung entferne, haben wir gerade hinzugefügt, dass die Seite ohne Fehler geladen wird: S

    – Sam

    18. September 2015 um 13:42 Uhr


  • Wenn Sie alles aus Ihrem Foreach entfernen, erhalten Sie immer noch den Fehler?

    – iain

    21. September 2015 um 10:11 Uhr

  • Wenn $status ist eine Sammlung, Überprüfung mit empty() wird nicht funktionieren, es wird immer wahr zurückgegeben. Sie müssen eine von verwenden $status->isEmpty(), $status->count()oder count($status).

    – Matt K

    2. Dezember 2015 um 16:27 Uhr

Es ist also ein Array ==== '' funktioniert nicht (das === bedeutet, dass es eine leere Zeichenfolge sein muss.)

Verwenden zählen() um zu identifizieren, dass das Array irgendwelche Elemente hat (Anzahl gibt eine Zahl zurück, 1 oder größer wird als wahr ausgewertet, 0 = falsch).

@if (count($status->replies) > 0)
 // your HTML + foreach loop
@endif

Benutzer-Avatar
Nabel Schah

Echodaten, falls vorhanden

Manchmal möchten Sie vielleicht eine Variable ausgeben, sind sich aber nicht sicher, ob die Variable gesetzt wurde. Wir können dies in ausführlichem PHP-Code wie folgt ausdrücken:

{{ isset($name) ? $name : 'Default' }}

Anstatt jedoch eine ternäre Anweisung zu schreiben, bietet Ihnen Blade die folgende praktische Abkürzung:

{{ $name or 'Default' }}

Wenn in diesem Beispiel die Variable $name vorhanden ist, wird ihr Wert angezeigt. Wenn es jedoch nicht vorhanden ist, wird das Wort Standard angezeigt.

Aus https://laravel.com/docs/5.4/blade#displaying-data

  • Jetzt, da Laravel PHP 7.1 erfordert, können Sie den Null-Coalesce-Operator verwenden: {{ $name ?? ‘Default’}} (Der “or”-Operator ist in Laravel 5.6 veraltet)

    – Jannej

    21. Juni 2018 um 9:03 Uhr

Mit dem folgenden Code kann man zuerst überprüfen, ob die Variable gesetzt ist oder nicht, indem man @isset der Laravel-Direktive verwendet und dann überprüft, ob das Array leer ist oder nicht, indem man @unless der Laravel-Direktive verwendet

@if(@isset($names))
    @unless($names)
        Array has no value
    @else
        Array has value

        @foreach($names as $name)
            {{$name}}
        @endforeach

    @endunless
@else
    Not defined
@endif

  • Jetzt, da Laravel PHP 7.1 erfordert, können Sie den Null-Coalesce-Operator verwenden: {{ $name ?? ‘Default’}} (Der “or”-Operator ist in Laravel 5.6 veraltet)

    – Jannej

    21. Juni 2018 um 9:03 Uhr

Benutzer-Avatar
Zuschreiber

Dies ist meine beste Lösung, wenn ich die Frage gut verstanden habe:

Gebrauch von $object->first() -Methode, um den darin enthaltenen Code auszuführen if Anweisung einmal, das heißt, wenn auf der ersten Schleife. Das gleiche Konzept gilt für $object->last().

    @if($object->first())
        <div class="panel user-list">
          <table id="myCustomTable" class="table table-hover">
              <thead>
                  <tr>
                     <th class="col-email">Email</th>
                  </tr>
              </thead>
              <tbody>
    @endif

    @foreach ($object as $data)
        <tr class="gradeX">
           <td class="col-name"><strong>{{ $data->email }}</strong></td>
        </tr>
    @endforeach

    @if($object->last())
                </tbody>
            </table>
        </div>
    @endif

1345040cookie-checkLaravel-Blade-Check für jeden leer

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy