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'}一起工作如果可能的话,我真的认为函数调用应该在控制器中,而不是在视图中!他拒绝常识他拒绝常识