我在刀片模板中有这个代码:
{{ $birthday->format('m/d/Y') }}
当$ birthday为null时,我收到此错误,如何抑制此异常?
我想在$ birthday为null时显示空字符串,我尝试了这两个解决方案但没有成功:
{{ $birthday->format('m/d/Y') or '' }}
和
{{ @$birthday->format('m/d/Y') }}
有什么建议吗?我想刀片解决方案不是雄辩的模型...
答案 0 :(得分:2)
来自Eloquent
模型的日期会返回Carbon/Carbon
个对象,如果未设置,则会返回null
。如果您希望日期为空字符串(如果不存在),则可以创建accessor。
class Foo extends Eloquent {
public function getBirthdayAttribute() {
return isset($this->attributes['birthday']) && $this->attributes['birthday'] instanceof \DateTime ? $this->attributes['birthday']->format('m/d/Y') : '';
}
}
答案 1 :(得分:2)
所有其他答案过于复杂,或者在您需要对有问题的变量调用函数的情况下将无法使用。
幸运的是,Laravel对此有一个很好的技巧。您可以使用git init repo
cd repo
git branch -m master slave
助手:
optional
自Laravel 6起可用 https://laravel.com/docs/8.x/helpers#method-optional
答案 2 :(得分:1)
试试这个:
{{isset($生日)? $ birthday->格式(' m / d / Y'):'' }}
答案 3 :(得分:1)
您可以使用@if
,@elseif
,@else
和@endif
指令构建blade if语句。这些指令的功能与它们的PHP对应程序完全相同:
@if($birthday)
{{ $birthday->format('m/d/Y') }}
@endif
注意:在@if
中使用@foreach $x
会为每个$x
重复if语句
More about Laravel Blade
修改强>
这是您正在寻找的优雅解决方案
{{ $birthday->format('m/d/Y') ?: '' }}
答案 4 :(得分:1)
您可以使用null coalesce为变量设置默认值。
{{ $var ?? 'default' }}
或者如果你有PHP <7
<?php isset($var) ? $var : 'default'; ?>
{{ $var }}
答案 5 :(得分:1)
使用三元运算符:
{{ is_null($birthday) ? '' : $birthday->format('m/d/Y') }}
答案 6 :(得分:1)
从PHP 8.0开始,您可以使用nullsafe operator (?->)
,而当$birthday
为null时,它将整个表达式转换为null。
{{ $birthday?->format('m/d/Y') }}
答案 7 :(得分:0)
我的解决方案是扩展刀片:
class AppServiceProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Blade::directive('datetime', function ($expression) {
if($expression == null){
return '';
}else{
return "<?php echo ($expression)->format('m/d/Y'); ?>";
}
});
}
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
//
}
}
答案 8 :(得分:0)
我经常使用
{{ $var->prop ? $var->prop->format('d/m/Y') : '' }}