Jak odczytać wartość domyślną, jeśli wartość nie jest ustawiona

Chciałbym wiedzieć, jaki byłby najlepszy sposób wyświetlania wartości domyślnej, jeśli podana wartość nie jest ustawiona. Mam następujące w pliku blade (Nie mogę zagwarantować, że klucz jest ustawiony, zależy to od wielu czynników).

{{ $foo['bar'] }}

Wiedziałbym, czy Poniżej jest najlepszym sposobem, aby to zrobić,

{{ (isset($foo['bar']) ? $foo['bar'] : 'baz' }}
Czy jest na to lepszy sposób?

Dzięki:)

Author: Jazerix, 2013-08-02

5 answers

Z Laravel 4.1+ możesz po prostu zrobić to tak:

{{ $Variable or "Default Message" }}

To dokładnie to samo co:

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

Edit: na marginesie, powyżej jest obsługiwane w PHP 7+, używając ??

echo $Variable ?? 'Default Message';
 95
Author: Jazerix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 17:36:09

Składnia trójwymiarowego skrótu PHP 5.3 działa w szablonach Blade:

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

Nie będzie działać z niezdefiniowanymi zmiennymi najwyższego poziomu, ale świetnie nadaje się do obsługi brakujących wartości w tablicach i obiektach.

 11
Author: joemaller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-18 04:30:05

Zalecam ustawienie domyślnej wartości w kontrolerze zamiast robienia obejścia w widoku.

Jest to najlepszy sposób, ponieważ utrzymuje logikę z dala od widoku i utrzymuje znaczniki widoku w czystości.

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

if(!isset($foo['bar'])){
     $foo['bar'] = 'baz';
}
 4
Author: Chris Bier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-02 18:32:21

Od Laravel 5.7 {{$Variable or "Default Message"}} rzuca $Variable is not defined. To działa.

 2
Author: Edmund Sulzanok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 09:53:45

Podczas gdy odpowiedź Chrisa B jest całkowicie poprawna; czułem, że być może jest to pytanie, które może mieć alternatywną odpowiedź. Niektórzy woleliby, aby ich Kontrolery nie były "grube" i w tym przypadku przynajmniej użycie prezentera może być odpowiedzią, której szukasz, aby umożliwić dużą elastyczność w widokach aplikacji.

Spójrz na następujący projekt / pakiet na Githubie. Readme jest dość solidny z wieloma przykładami, które pomogą Ci zacząć.

It pozwoli Ci zrobić to, o co prosiłeś i po prostu zadzwonić

{{ $foo['bar'] }}

Twoim zdaniem.

 0
Author: twaambo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-03 17:36:37