2016-12-25 3 views
0

Ich bin neu zu Laravel und ich weiß, dass ich Variablen innerhalb des doppelt geschweiften Klammern wie dieses Echo kann:elegante Art und Weise für die schnelle IF-Anweisung in Klingen

<p>{{ $posts->id }}</p> 

Jetzt in meinem Fall habe ich eine Form, die manchmal die enthält variable $ posts (die übrigens die Tabelle ist) zu aktualisieren und manchmal enthält es keine Zeile zum Einfügen einer Zeile abhängig von den Parametern in der URL.

Natürlich, wenn es keine Post gibt dann wird der Teil "-> ID" fehlschlagen. Gibt es eine elegante Art und Weise ein schnellen IF-Anweisung hier zu machen, wie:

<?php if ($posts) echo $posts["id"]; ?> 

aber nur die Klinge-Engine.

Ich weiß, dass ich @if um den HTML-Block verwenden kann, aber dann müsste ich diesen Block zweimal die ganze Zeit schreiben.

Antwort

1

Es hängt davon ab, was genau ist $posts.

Sie können ternäre Anweisung verwenden. wenn $posts Sammlung oder ein Array ist, verwenden empty Zum Beispiel:

{{ empty($posts) ? '' : $posts->id }} 

Wenn es nur Variable ist, verwenden isset()

In einigen Fällen or Syntax verwenden:

{{ $posts or 'It is empty' }} 

In PHP7 können Sie Verwenden Sie ?? (Nullkoaleszenzoperator), um zu überprüfen, ob die Variable isset(). Zum Beispiel:

{{ $posts ?? $posts->id }} 

können Sie eine andere Erklärung finden in the official documentation (siehe Echoing Data If It Exists Teil).

+0

$ Beiträge ist das Ergebnis von Post :: findOrFail, die ich glaube, ist nur JSON, Post ist mein Modell, eine Datenbanktabelle darstellt. – Michael

+0

'findOrFail()' gibt eine Exception zurück, wenn kein Post gefunden wurde. Verwenden Sie stattdessen 'find()' oder 'wo() -> first()', was 'null' zurückgibt. In diesem Fall können Sie den ternären Operator '{{is_null ($ post)? '': $ post-> id}} ' –

+0

' findOrFail() 'gibt json nicht zurück; es wird ein Objekt zurückgeben (oder eine Ausnahme auslösen bei fehlgeschlagen) –

Verwandte Themen