Как отобразить значение по умолчанию, если значение не установлено лезвием

Я хотел бы знать, что будет лучшим способом для отображения значения по умолчанию, если данное значение не установлено. У меня есть следующее в блейд-файле (я не могу гарантировать, что ключ установлен, это зависит от множества факторов).

{{ $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'] }}

по вашему мнению.

Другие вопросы по тегам