59

我想知道如果未设置给定值,显示默认值的最佳方式是什么。我在刀片文件中有以下内容(我不能保证设置了密钥,这取决于多种因素)。

{{ $foo['bar'] }}

我会知道以下是否是最好的方法,

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

还是有更好的方法来做到这一点?

谢谢 :)

4

6 回答 6

150

使用 php 的 null 合并运算符:

{{ $variable ?? "Default Message" }}

从 Laravel 5.7 开始删除

使用 Laravel 4.1-5.6,你可以简单地这样做:

{{ $variable or "Default Message" }}

它与以下内容相同:

echo isset($variable) ? $variable : 'Default Message'; 
于 2014-01-07T21:25:58.457 回答
21

PHP 5.3 的三元快捷语法适用于 Blade 模板:

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

它不适用于未定义的顶级变量,但它非常适合处理数组和对象中的缺失值。

此外,例如,如果我们想显示一个组织的创建日期,该日期可能不存在(例如,如果我们从数据库手动创建它并且不链接到该字段的任何记录),然后执行就像是

{{ $organization->created_at ? $organization->created_at->format('d/m/Y H:i') : "NULL" }}
于 2013-12-18T04:30:05.330 回答
12

由于 Laravel 5.7{{$Variable or "Default Message"}}抛出$Variable is not defined. 这{{$Variable ?? "Default Message"}}虽然有效。

于 2018-09-12T09:53:45.893 回答
5

我建议在您的控制器中设置默认值,而不是在您的视图中进行解决。

这是最好的方法,因为它可以让你的视图保持逻辑,并保持视图的标记干净。

例如在您的控制器中,在将数据传递给视图之前:

if(!isset($foo['bar'])){
     $foo['bar'] = 'baz';
}
于 2013-08-02T18:22:40.757 回答
1

通常我使用空合并运算符(在 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()

于 2020-04-29T14:57:34.753 回答
0

虽然克里斯 B 的回答是完全有效的;我觉得也许这是一个可以有替代答案的问题。有些人不想让他们的控制器“变胖”,至少在这种情况下,使用Presenter可能是您寻求在应用程序视图中提供很大灵活性的答案。

在 Github 上查看以下项目/包。自述文件非常健壮,有许多示例可以帮助您入门。

它可以让你做你所要求的,只需打电话

{{ $foo['bar'] }}

在你看来。

于 2013-08-03T17:36:37.590 回答