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

paq*_*ttg 49 templating laravel blade laravel-4 laravel-5

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

{{ $foo['bar'] }}
Run Code Online (Sandbox Code Playgroud)

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

{{ (isset($foo['bar']) ? $foo['bar'] : 'baz' }}
Run Code Online (Sandbox Code Playgroud)

或者有更好的方法吗?

谢谢 :)

Jaz*_*rix 118

使用Laravel 4.1+,你可以这样做:

{{ $variable ?? "Default Message" }}
Run Code Online (Sandbox Code Playgroud)

它完全相同:

{{ $variable or "Default Message" }}
Run Code Online (Sandbox Code Playgroud)

编辑:在旁注中,上面是PHP 7+支持,使用?

echo isset($variable) ? $Variable : 'Default Message'; 
Run Code Online (Sandbox Code Playgroud)

  • ``{{$$变量?? “默认消息”}}`参见Laravel 5.7的@Edmund答案 (2认同)

joe*_*ler 15

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

{{ $foo->bar ?: 'baz' }}
Run Code Online (Sandbox Code Playgroud)

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

  • {{ @$foo->bar ?: 'baz' }} // 避免回显错误,当 bar 未设置时 (3认同)
  • 这不是一个很好的方法.如果'bar'属性的值设置为零,null或false,它可能会破坏你的代码..如果"bar"是其中之一,它将打印出"baz". (3认同)

Edm*_*nok 11

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


Chr*_*ier 5

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

这是最好的方法,因为它将逻辑排除在您的视图之外,并保持视图的标记干净。

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

if(!isset($foo['bar'])){
     $foo['bar'] = 'baz';
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,我不这么认为,只是因为这不是该视图的目的。视图应该只是显示控制器中预先准备的数据。最好尽可能让逻辑远离你的视线。这可以将关注点分开并很好地遵循 MVC 准则。 (2认同)