Php Laravel刀片返回一个“a”;“未定义的属性”;在具有已定义属性的对象上

Php Laravel刀片返回一个“a”;“未定义的属性”;在具有已定义属性的对象上,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,我有一个包含多个字段的模型,包括两个文本字段,用于存储字典的JSON列表。其中一个用于存储图像数据,工作正常;但是,当我尝试从刀片模板访问属性时,存储带有链接的dict列表的第二个dict会返回一个未定义的属性:stdClass::$title 如果我删除对我的links属性的调用,那么所有其他属性(包括转换为对象数组的图像)都可以正常渲染 我尝试了dd()links属性,这两个属性都显示它已设置,它是一个数组,并且它充满了两个属性(title、url)的对象,这两个属性都是我在失败时尝试访问的

我有一个包含多个字段的模型,包括两个文本字段,用于存储字典的JSON列表。其中一个用于存储图像数据,工作正常;但是,当我尝试从刀片模板访问属性时,存储带有链接的dict列表的第二个dict会返回一个
未定义的属性:stdClass::$title

如果我删除对我的links属性的调用,那么所有其他属性(包括转换为对象数组的图像)都可以正常渲染

我尝试了
dd()
links属性,这两个属性都显示它已设置,它是一个数组,并且它充满了两个属性(title、url)的对象,这两个属性都是我在失败时尝试访问的

然而,一旦我尝试实际访问它们,我就得到了我试图访问的确切属性的
未定义属性

想知道有没有人遇到过这样的事情?真正奇怪的是,图像JSON数据的呈现没有任何问题。所有这些都与路由模型绑定绑定在一起,这已被验证有效

雄辩模型中的属性获取者 调用链接属性的刀片模板部分失败 “未定义的属性:stdClass::$title”

似乎在您的一个链接中缺少title属性

您可以通过以下方式进行检查:

@foreach ($artist->links as $link)
  <?php if(property_exists($link, "title")) : ?>
    {{ $link->title }}
  <?php else : ?>
    NO TITLE [DEBUG: {{ dd($link) }}]
  <?php endif; ?>, {{ $link->url }}
@endforeach
您的元素字段是标题(with'),但必须是“标题”:“测试”


您可以通过删除参数名中的单引号来修复它。

这会很奇怪,因为我粘贴的JSON是它加载的唯一内容。根据$link对象上的一个dd(),它实际上有一个标题,就在我试图直接引用$link->title时。是的,双报价/单报价业务很奇怪,不是吗?这直接来自数组上的json_encode调用。这可能是最好的线索,但与Laravel相比,它似乎可能是PHP的一个问题。在PHP交互式shell中进行了修补之后,我认为Laravel$request对象在JSON编码之前不知何故向键添加了单引号。我试着用json_解码这个确切的json字符串并访问属性,结果得到了相同的未定义错误。然后,我从头开始创建数组数组,并对其进行json_编码,没有单引号,解码/属性访问也很好。blade Html::宏从字面上接受了我传递的输入名称,
链接[$key]['title']
,带有单引号,并将它们作为键的一部分传递。谢谢你指出这一点,也许是时候让我买一些新的阅读眼镜了。
@if (is_array($artist->links))
<div class="links">
    <h4>Links</h4>

        <ul>
            @foreach ($artist->links as $link)
                {{ $link->title }}, {{ $link->url }}
            @endforeach
        </ul>

</div>
    @endif
@if (is_array($artist->images))
    <ul class="images">
        @foreach ($artist->images as $image)

            <li>{!! Html::image(Html::buildS3Url(array(
        "basedir" => "artists", "id" => $artist->id, "prefix" => $image->prefix,
        "extension" => $image->extension, "conversion" => "display")
    ), $artist->name) !!}</li>

        @endforeach
    </ul>
@endif
### links (doesn't work)
#tinker output
links: "[{"'title'":"test","'url'":"http:\/\/test.com"}]",,

# dd()
array:1 [▼
  0 => {#308 ▼
    +"'title'": "test"
    +"'url'": "http://test.com"
  }
]
### images (works)
# tinker output
images: "[{"prefix":1440693993,"extension":"png"},{"prefix":1440697822,"extension":"png"}]"

# dd()    
array:2 [▼
      0 => {#308 ▼
        +"prefix": 1440693993
        +"extension": "png"
      }
      1 => {#307 ▼
        +"prefix": 1440697822
        +"extension": "png"
      }
    ]
@foreach ($artist->links as $link)
  <?php if(property_exists($link, "title")) : ?>
    {{ $link->title }}
  <?php else : ?>
    NO TITLE [DEBUG: {{ dd($link) }}]
  <?php endif; ?>, {{ $link->url }}
@endforeach
links: "[{"'title'":"test","'url'":"http:\/\/test.com"}]",,