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