如何处理拉拉维尔中未定义的偏移量?

2022-08-30 18:27:15

登录后登陆页面时,我收到此错误:

错误编译.php行 11573 中的异常:未定义的偏移量:0 (查看:C:\xampp\htdocs\campusguru\resources\views\home.blade.php)

我知道此错误的原因是我传递给视图的空变量。

我已经试过了:

if(isset($blog)) { do something }

并在刀片视图中显示为:

{{ $blogs[0]->title or '' }}

无论如何,我可以处理这个错误。还是有更好的方法?


答案 1

请尝试以下操作:

{{ isset($blogs[0]) ? $blogs[0]->title : '' }}

如果你正在使用一个 foreach 来获得每次使用$blog->title

@foreach ($blogs as $blog)
  {{ $blog->title }}
@endforeach

答案 2

问题是实际定义的,其值为(即空),因此这意味着该语句的计算结果为 。同样的事情也适用于集合。如果集合为空(即没有元素但已定义)仍将计算为,但访问将导致错误。$blogs[]arrayisset($blogs)trueisset($blogs)true$blogs[0]Undefined offset: 0

您可以尝试以下解决方案:

使用计数

if(count($blogs)) { /* do something */ }

if 或 函数将返回零,这意味着该值为空。$blogs = []$blogs = nullcount$blogs

使用

if(!empty($blogs)) { /* do something */ }

这相当于 PHP 手册中描述的编写 - 空!isset($var) || $var == false

如果 var 存在并且具有非空的非零值,则返回 FALSE。否则返回 TRUE

以下内容被视为空:

  • ""(空字符串)
  • 0(0 为整数)
  • 0.0(0 作为浮点数)
  • "0"(0 作为字符串)
  • NULL
  • FALSE
  • array()(一个空数组)
  • $var;(已声明但未带值的变量)
  • 检查集合是否为空

    if 是 足以使用 'isNotEmpty() 方法检查它是否不为空:$blogsCollection

    @if($blogs->isNotEmpty()) <!-- Do your stuff --> @endif
    

    编辑

    我忘了添加刀片语法:

    @if(count($blogs)) <!-- Do whatever you like --> @endif
    

    @if(!empty($blogs)) <!-- Do whatever you like --> @endif
    

    编辑 2

    我正在为这个答案添加更多内容,以解决评论中提出的一些问题。我认为您的问题如下:

    $blogs是一个空集合,因此已定义但它没有元素。因此,该语句将计算为传递第一个条件。在边栏选项卡模板中,所做的检查绝对不等于注释中指出的,但它是一个将返回 or 的表达式,因此即使存在,它也永远不会打印出参数。这里的问题是,在检查条件时,您实际上是在访问将触发异常的集合元素,因为该集合实际上是空的。我说的是,除了if(isset($blogs))trueif{{ $blogs[0]->title or '' }}<?php isset($blogs[0]->title) ? $blogs[0]->title : '' ?>truefalsetitle$blogs[0]$blogs[0]->title0$blogsUndefined offset: 0

    if(count($blogs)) { /* do something */ }
    

    (检查已设置的并且其长度大于 ),您应该在模板中执行$blogs0

    {{ isset($blogs[0]->title) ? $blogs[0]->title : '' }}
    

    或更简洁

    {{ $blogs[0]->title ?: '' }}
    

    假设控制流只有在通过第一个 .如果问题仍然存在,则问题在代码中的其他位置恕我直言。$blogsif


    推荐