如果未设置刀片值,如何回显默认值

时间:2013-08-02 18:09:14

标签: laravel laravel-4 laravel-5 blade templating

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

{{ $foo['bar'] }}

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

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

还是有更好的方法吗?

谢谢:)

6 个答案:

答案 0 :(得分:104)

使用php的null coalesce运算符:

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

从Laravel 5.7开始删除

使用Laravel 4.1-5.6,您可以这样做:

{{ $variable or "Default Message" }}

它与:

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

答案 1 :(得分:14)

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

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

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

答案 2 :(得分:10)

由于Laravel 5.7 {{$Variable or "Default Message"}}引发$Variable is not defined。这个{{$Variable ?? "Default Message"}}可以工作。

答案 3 :(得分:4)

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

这是最好的方法,因为它可以使视图保持逻辑状态,并保持视图的标记清晰。

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

if(!isset($foo['bar'])){
     $foo['bar'] = 'baz';
}

答案 4 :(得分:0)

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

在Github上查看以下project/package。自述文件非常强大,有很多例子可以帮助你。

它将允许您完成您所要求的内容并简单地调用

{{ $foo['bar'] }}

在你看来。

答案 5 :(得分:0)

通常,我使用空合并运算符(introduced in 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函数相同。这可能会有所帮助:In where shall I use isset() and !empty()