How to echo a default value if value not set blade

夙愿已清 提交于 2019-11-29 22:50:00

Use php's null coalesce operator:

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

Removed as of Laravel 5.7

With Laravel 4.1-5.6 you could simply do it like this:

{{ $variable or "Default Message" }}

It's the same as:

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

PHP 5.3's ternary shortcut syntax works in Blade templates:

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

It won't work with undefined top-level variables, but it's great for handling missing values in arrays and objects.

Since Laravel 5.7 {{$Variable or "Default Message"}} throws $Variable is not defined. This {{$Variable ?? "Default Message"}} works though.

I recommend setting the default value in your controller instead of making a work-around in your view.

This is the best way because it keeps logic out of your view, and keeps the view's markup clean.

For example in your controller, before passing data to the view:

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

While Chris B's answer is perfectly valid; I felt perhaps this is a question that can have an alternative answer. Some would prefer not to make their controllers "fat" and in this case at least, the use of a Presenter could be the answer you seek for allowing a great deal of flexibility in your application views.

Take a look at the following project/package on Github. The readme is pretty robust with a number of examples to get you going.

It will allow you to do just what you asked and simply call

{{ $foo['bar'] }}

in your view.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!