如果没有设置给定值,我想知道显示默认值的最佳方法是什么。我在blade文件中有以下内容(我不能保证键是否设置,这取决于多种因素)。
{{ $foo['bar'] }}
我想知道以下是否是最佳做法:
{{ (isset($foo['bar']) ? $foo['bar'] : 'baz' }}
还有更好的方法吗?
谢谢:)
如果没有设置给定值,我想知道显示默认值的最佳方法是什么。我在blade文件中有以下内容(我不能保证键是否设置,这取决于多种因素)。
{{ $foo['bar'] }}
我想知道以下是否是最佳做法:
{{ (isset($foo['bar']) ? $foo['bar'] : 'baz' }}
还有更好的方法吗?
谢谢:)
使用 PHP 的 null 合并运算符:
{{ $variable ?? "Default Message" }}
从 Laravel 5.7 开始已经被移除
在 Laravel 4.1-5.6 中,你可以像这样轻松地完成它:
{{ $variable or "Default Message" }}
这与以下内容相同:
echo isset($variable) ? $variable : 'Default Message';
PHP 5.3 的三元运算符快捷语法在 Blade 模板中也适用:
{{ $foo->bar ?: 'baz' }}
它不能处理未定义的顶级变量,但对于处理数组和对象中的丢失值非常有用。
此外,例如,如果我们想要显示组织创建的日期,但该日期可能不存在(例如,如果我们手动从数据库中创建它,并且不链接到任何记录以获取该字段),那么可以执行以下操作:
{{ $organization->created_at ? $organization->created_at->format('d/m/Y H:i') : "NULL" }}
{{$Variable or "Default Message"}}
将抛出$Variable未定义
的异常。然而,使用{{$Variable ?? "Default Message"}}
则可以正常工作。{{$variable or 'Default Message'}}
编译为 <?php echo e($variable or 'Default Message'); ?>
,而不是 echo isset($variable) ? $variable : 'Default Message';
。 - R. Wangif(!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()。虽然Chris B的回答完全有效,但我觉得这可能是一个可以有另一种答案的问题。有些人可能不想让他们的控制器变得“臃肿”,在这种情况下,使用Presenter可能是您寻找的答案,以允许应用程序视图具有很大的灵活性。
请查看Github上的以下project/package。自述文件非常强大,提供了许多示例供您参考。
它将允许您做到您所要求的,并简单地调用
{{ $foo['bar'] }}
在你的视图中。