Как отобразить значение по умолчанию, если значение не установлено лезвием
Я хотел бы знать, что будет лучшим способом для отображения значения по умолчанию, если данное значение не установлено. У меня есть следующее в блейд-файле (я не могу гарантировать, что ключ установлен, это зависит от множества факторов).
{{ $foo['bar'] }}
Я бы знал, является ли следующий способ лучшим способом,
{{ (isset($foo['bar']) ? $foo['bar'] : 'baz' }}
или есть лучший способ сделать это?
Спасибо:)
5 ответов
С Laravel 4.1+ вы можете просто сделать это так:
{{ $Variable or "Default Message" }}
Это точно так же, как:
echo isset($Variable) ? $Variable : 'Default Message';
Изменить: Примечание: выше поддерживается в PHP 7+, используя??
echo $Variable ?? 'Default Message';
Тернарный синтаксис в PHP 5.3 работает в шаблонах Blade:
{{ $foo->bar ?: 'baz' }}
Он не будет работать с неопределенными переменными верхнего уровня, но он отлично подходит для обработки пропущенных значений в массивах и объектах.
С Laravel 5.7 {{$Variable or "Default Message"}}
бросает $Variable is not defined
, это {{$Variable ?? "Default Message"}}
работает хоть.
Я рекомендую установить значение по умолчанию в вашем контроллере вместо того, чтобы обходить ваши глаза.
Это лучший способ, потому что он не допускает логики в вашем представлении и сохраняет разметку представления в чистоте.
Например, в вашем контроллере, перед передачей данных в представление:
if(!isset($foo['bar'])){
$foo['bar'] = 'baz';
}
Обычно я использую нулевой оператор объединения ( введен в PHP 7.0):
{{ $foo['bar'] ?? 'baz' }}
Однако, если "baz" на самом деле длинное выражение (например, несколько строк HTML, возможно, с некоторыми переменными PHP), то я использую Blade. @isset
(@else
необязательно, но работает):
@isset($foo['bar'])
{{ $foo['bar'] }}
@else
{{ $b }}
<br>
{{ $a }}
<br>
{{ $z }}
@endisset
(Разумеется, немного вольности с примером.)
Также есть @empty($expr)
который имеет аналогичный синтаксис, но работает так же, как одноименная функция PHP. Это может быть полезно: где я должен использовать isset () и! Empty()
В то время как ответ Криса Б. совершенно действителен; Я чувствовал, возможно, это вопрос, который может иметь альтернативный ответ. Некоторые предпочли бы не делать свои контроллеры "толстыми", и в этом случае, по крайней мере, использование Presenter могло бы стать тем ответом, который вы ищете, чтобы обеспечить большую гибкость в представлениях вашего приложения.
Посмотрите на следующий проект / пакет на Github. Файл readme довольно мощный, с несколькими примерами, которые помогут вам в этом.
Это позволит вам сделать то, что вы просили, и просто позвонить
{{ $foo['bar'] }}
по вашему мнению.