【问题标题】:Trapping "Trying to get property of non-object" in blade templats在刀片模板中捕获“尝试获取非对象的属性”
【发布时间】:2019-09-28 11:00:50
【问题描述】:

我正在调试一个 laravel 项目,在许多情况下,开发人员只是简单地将双胡须放入引用对象属性的刀片模板中,而没有首先检查这些关系是否存在。

例子

{{$category->name}}

<small>{{$category->parent->name}}</small>

如果例如 $category 没有设置,或者 $category->parent 没有设置,laravel 中是否有一种内置的方法可以静默失败,而无需求助于这些方面的东西......

@if (isset($category))
   {{$category->name}}
@endif

@if (isset($main_category->parent))
    @if($main_category->parent != null)
        <small>{{$main_category->parent->name}}</small>
    @endif
@endif

【问题讨论】:

标签: php laravel error-handling laravel-blade


【解决方案1】:

有更好的方法。

{{ $category->name ?? '' }}
// or
{{ $category->name or '' }} // for older version of laravel

【讨论】:

  • 如果您使用的是最新版本的 php,这可以正常工作,如果您使用的是旧版本,则需要使用完整的语法(条件?if-true:if-false)跨度>
【解决方案2】:

有更好的方法来隐藏你得到的错误,

{{ @$category }}

@ 将抑制未定义或未设置变量的错误。

PHP 支持一种错误控制运算符:at 符号 (@)。什么时候 添加到 PHP 中的表达式之前,任何可能出现的错误消息 由该表达式生成的将被忽略。

这里是error control operator 的官方 php 文档。

【讨论】:

  • 就我所问的而言,这是我认为最干净的解决方案......除非有办法让它在模型或其他东西中默认做到这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多