2013-08-02 14 views
25

Chciałbym wiedzieć, jaki byłby najlepszy sposób wyświetlania wartości domyślnej, jeśli dana wartość nie jest ustawiona. Mam w pliku typu blade (nie mogę zagwarantować, że klucz jest ustawiony, zależy to od wielu czynników).Jak wywołać echo wartości domyślnej, jeśli nie ustawiono wartości ostrza

{{ $foo['bar'] }} 

Chciałbym wiedzieć, czy po to najlepsza droga do tego zabrać,

{{ (isset($foo['bar']) ? $foo['bar'] : 'baz' }} 

czy istnieje lepszy sposób to zrobić?

Dzięki :)

Odpowiedz

81

Z laravel 4.1+ można po prostu zrobić to tak:

{{ $Variable or "Default Message" }} 

Jest to dokładnie taki sam jak:

echo isset($Variable) ? $Variable : 'Default Message'; 

Edit: Na marginesie, powyżej jest obsługiwana w PHP 7+ , za pomocą ??

echo $Variable ?? 'Default Message'; 
+0

Wow, to miłe, ale czy nie uważasz, że logika taka powinna być trzymana poza zasięgiem wzroku? –

+0

Dobra uwaga. Ogólnie tak, ale widzę czasy, w których może się to przydać. Na przykład używam tego w mojej witrynie na domyślnym szablonie. Jeśli tytuł nie zostanie wysłany do widoku, wyświetli się tytuł mojej strony, używając powyższego kodu :). – Jazerix

+0

To prawda, dobry punkt. Dzięki za informację o funkcji L4 :) –

4

zalecam ustawienie wartości domyślnej w kontrolerze zamiast tworzenia obejście w widoku.

Jest to najlepszy sposób, ponieważ utrzymuje logikę z widoku i utrzymuje czystość znaczników widoku.

Na przykład w kontrolerze, przed przekazaniem danych do widzenia:

if(!isset($foo['bar'])){ 
    $foo['bar'] = 'baz'; 
} 
+0

Podskoczyłem do rozwiązania szablonu, może coś takiego jak {{$ foo ['bar'] | 'baz'}}, ale dochodzę do wniosku, że to nie jest funkcja. – paquettg

+1

Tak, nie sądzę, że tak jest, tylko dlatego, że nie jest to celem tego widoku. Widok powinien po prostu wyświetlać dane przygotowane wcześniej w kontrolerze. Najlepiej, aby logika była jak najdalej od widoku. Dzięki temu obawy są rozdzielone i ładnie podąża za wytycznymi MVC. –

+0

Jeśli chcesz umieścić go w widoku, sugerowany sposób wygląda najlepiej. –

0

Chociaż odpowiedź Chris B jest całkowicie poprawny; Czułem, że to jest pytanie, które może mieć alternatywną odpowiedź. Niektórzy woleliby nie sprawić, by ich kontrolerzy byli "grubi" i przynajmniej w tym przypadku użycie odpowiedzi na pytanie, którego szukasz, pozwala na dużą elastyczność w widokach aplikacji.

Spójrz na następujące project/package na Github. Plik readme jest całkiem niezawodny z wieloma przykładami, które ułatwiają pracę.

To pozwoli Ci nie tylko, o co prosiłeś i po prostu zadzwonić

{{ $foo['bar'] }} 

w widoku. trójargumentowy składnia skrót

11

w PHP 5.3 działa w szablonach Blade:

{{ $foo->bar ?: 'baz' }} 

To nie będzie działać z niezdefiniowanych zmiennych najwyższego poziomu, ale to nic wielkiego do obsługi brakujących wartości w tablicach i obiektów.

+0

tak, to robi. Ale dlaczego skrót Laravel nie działa? –

+0

{{@ $ foo-> bar?: 'Baz'}} // unika błędów echa, gdy pasek nie jest ustawiony – Cedric

+3

to nie jest dobry sposób robienia tego. może złamać twój kod, jeśli wartość właściwości "bar" jest ustawiona na zero, null lub false. wydrukuje "baz", jeśli "bar" jest jednym z nich. – spetsnaz

Powiązane problemy