Php 如何抑制laravel blade中的“空时调用成员函数()”错误?
我在刀片模板中有以下代码:Php 如何抑制laravel blade中的“空时调用成员函数()”错误?,php,laravel,blade,laravel-blade,Php,Laravel,Blade,Laravel Blade,我在刀片模板中有以下代码: {{ $birthday->format('m/d/Y') }} 当$birthday为null时,我收到此错误,如何抑制此异常 我想在$birth为null时显示空字符串,我尝试了这两种解决方案,但没有成功: {{ $birthday->format('m/d/Y') or '' }} 以及: 有什么建议吗?我希望刀片解决方案不是雄辩的模型…试试这个: {{isset$birthday?$birthday->format'm/d/Y':}试试这个:
{{ $birthday->format('m/d/Y') }}
当$birthday为null时,我收到此错误,如何抑制此异常
我想在$birth为null时显示空字符串,我尝试了这两种解决方案,但没有成功:
{{ $birthday->format('m/d/Y') or '' }}
以及:
有什么建议吗?我希望刀片解决方案不是雄辩的模型…试试这个:
{{isset$birthday?$birthday->format'm/d/Y':}试试这个:
{{isset$birthday?$birthday->format'm/d/Y':}您可以使用@if、@elseif、@else和@endif指令构造blade if语句。这些指令的功能与其对应的PHP指令相同:
@if($birthday)
{{ $birthday->format('m/d/Y') }}
@endif
注意:在@foreach$x中使用@if将对每个$x重复if语句
编辑
这是您正在寻找的优雅解决方案
{{ $birthday->format('m/d/Y') ?: '' }}
您可以使用@if、@elseif、@else和@endif指令构造blade if语句。这些指令的功能与其对应的PHP指令相同:
@if($birthday)
{{ $birthday->format('m/d/Y') }}
@endif
注意:在@foreach$x中使用@if将对每个$x重复if语句
编辑
这是您正在寻找的优雅解决方案
{{ $birthday->format('m/d/Y') ?: '' }}
您可以使用设置变量的默认值
{{ $var ?? 'default' }}
或者,如果您有PHP,您可以使用设置变量的默认值
{{ $var ?? 'default' }}
或者如果您有PHP使用三元运算符:
{{ is_null($birthday) ? '' : $birthday->format('m/d/Y') }}
使用三元运算符:
{{ is_null($birthday) ? '' : $birthday->format('m/d/Y') }}
雄辩模型中的日期返回Carbon/Carbon对象,如果未设置,则返回null。如果希望日期为空字符串(如果不存在),则可以创建一个空字符串
雄辩模型中的日期返回Carbon/Carbon对象,如果未设置,则返回null。如果希望日期为空字符串(如果不存在),则可以创建一个空字符串
我的解决方案是扩展刀片:
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()
{
//
}
}
我的解决方案是扩展刀片:
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()
{
//
}
}
我经常使用
{{ $var->prop ? $var->prop->format('d/m/Y') : '' }}
我经常使用
{{ $var->prop ? $var->prop->format('d/m/Y') : '' }}
所有其他答案都太复杂了,或者在您需要对所讨论的变量调用函数的情况下无法使用。 幸运的是拉威尔有一个很好的技巧;您可以使用可选的帮助器: {{可选$birth->format'm/d/Y'} 从拉威尔6号开始就有了
所有其他答案都太复杂了,或者在需要对相关变量调用函数的情况下无法使用。 幸运的是拉威尔有一个很好的技巧;您可以使用可选的帮助器: {{可选$birth->format'm/d/Y'} 从拉威尔6号开始就有了 从PHP 8.0开始,您可以使用$birth,当$birth为null时,它会将整个表达式转换为null
{{ $birthday?->format('m/d/Y') }}
从PHP8.0开始,您可以使用$birth,当$birth为null时,它会将整个表达式转换为null
{{ $birthday?->format('m/d/Y') }}
然后我需要重复这个代码200多次:@if$variable{{{$variable}}@endif它不优雅且无效…请用完整的代码编辑你的问题:这样我就可以观察你需要什么了。我现在知道的是,在设置$birth的值时,你需要显示$birth。你们使用的是刀片foreach还是for循环?我想这个问题已经解释得足够了。我正在寻找如何在变量为null时回显空字符串的解决方案…但我正在寻找优雅的解决方案…然后我需要将此代码重复200多次:@if$variable{{$variable}@endif不优雅且无效…请用完整的代码编辑您的问题:这样我就可以观察您需要什么了。我现在知道的是,在设置$birth的值时,您需要显示$birth。你们使用的是刀片foreach还是for循环?我想这个问题已经解释得足够了。我在寻找如何在变量为null时回显空字符串的解决方案…但我在寻找优雅的解决方案…然后我需要将此代码重复200次以上:@if$variable{{$variable}}@endif不优雅且无效…不明白我告诉您在哪里使用if和endifyes true,但这是一行代码。不管怎样,我看不到任何更优雅的东西。。。sorryok,在其他模板系统中,您可以找到类似这样的内容:{{$birth->format'm/d/Y'或}}},然后我需要将此代码重复200多次:@if$variable{{{$variable}}@endif不优雅且无效…不知道我告诉您在哪里使用if和endifyes true,但这是一行代码。不管怎样,我看不到任何更优雅的东西。。。sorryok,在其他模板系统中,您可以找到类似以下内容:{{$birth->format'm/d/Y'或}}导致这种情况的原因是PHP引擎中的一个旧设计问题。所有错误都可以转换为异常,也可以使用@使其静音,除非在非对象上调用方法。那案子有点特别。“我不认为他们会解决这个问题。”乔纳森·阿哈说,我不知道如何检查变量的存在?你为什么这么想?我只是在寻找优雅解决方案的想法…在其他php模板引擎中存在我正在寻找的功能…@Jonathan您认为我到目前为止是如何解决这个问题的,我使用了if语句,但我的问题是,是否有任何类似于其他php模板的刀片功能/解决方案
引擎,在smarty模板引擎中,您可以使用以下代码:{{@$birthday->format'm/d/Y'}。所以我的问题的正确答案是不,刀锋不能这么做!!!!!!!!我想看看smarty代码有什么不同。渲染输出几乎与上一个示例中在blade中看到的完全相同。垃圾输入,垃圾输出这是PHP引擎中的一个老设计问题。所有错误都可以转换为异常,也可以使用@使其静音,除非在非对象上调用方法。那案子有点特别。“我不认为他们会解决这个问题。”乔纳森·阿哈说,我不知道如何检查变量的存在?你为什么这么想?我只是在寻找优雅的解决方案……在其他php模板引擎中存在我正在寻找的功能……@Jonathan您认为我到目前为止是如何解决这个问题的,我使用了if语句,但我的问题是,在smarty模板引擎中,是否有任何类似于其他php模板引擎的刀片功能/解决方案,您可以使用以下代码:{{@$birth->format'm/d/Y'}。所以我的问题的正确答案是否定的,blade不能这样做!!!!!!!我想看看smarty代码有什么不同。渲染的输出几乎和你在上一个示例中在blade中看到的完全一样。{$var???'default'}很酷,但不能使用{{$var->someFunction???'default'}为什么它不起作用?我真的认为函数调用应该在控制器中,如果可能的话,不应该在视图中!这:{$var???'default'}很酷,但不会与{{$var->someFunction???'default'}一起工作如果可能的话,我真的认为函数调用应该在控制器中,而不是在视图中!他拒绝常识他拒绝常识