Laravel Blade返回" Undefined属性"在具有已定义属性

时间:2015-08-28 22:26:32

标签: php laravel laravel-5.1

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

如果删除对links属性的调用,所有其他属性(包括转换为对象数组的图像JSON)都可以正常呈现。

我已尝试dd()链接属性,它既显示了它的设置,又显示了一个数组,并且它充满了两个对象我失败时尝试访问的属性(标题,网址)。

但是,当我尝试实际访问它们时,我会获得Undefined property以获取我尝试访问的确切属性。

想知道是否有人遇到过这样的事情?真正奇怪的是,图像JSON数据正在呈现而没有任何问题。它全部与路径模型绑定捆绑在一起,经过验证可以正常工作。

Eloquent Model中的属性获取者

public function getLinksAttribute() {
    if (!empty($this->attributes['links'])) {
        return json_decode($this->attributes['links']);
    }
}

public function getImagesAttribute() {
    if (!empty($this->attributes['images'])) {
        return json_decode($this->attributes['images']);
    }
}

调用链接属性的刀片模板部分,

@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

调用images属性的刀片模板部分,成功

@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

Json通过修补程序和随后的dd()

对数据库中的数据进行编码
### 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"
      }
    ]

1 个答案:

答案 0 :(得分:2)

  

&#34;未定义的属性:stdClass :: $ title&#34;

似乎在您的某个链接中缺少标题属性

您可以通过以下方式查看:

@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"}]",,

您的元素字段为&#39; 标题&#39; (带&#39;),但必须为&#34; title& #34;:&#34;测试&#34;

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