Trying to get property 'goods_name' of non-object
我是论坛里看到 翻译:利用 Laravel Resources 来整合第三方 API 数据 ,感觉用 API 接口整合在 Resources 里。下面代码
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class JinbaoGoodsResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*/
public function toArray($request)
{
$goods_details = $this->resource['goods_detail_response']['goods_details']['0'];
return [
'mall_name' => $goods_details['mall_name'],
'goods_name' => $goods_details['goods_name'],
'goods_thumb' => $goods_details['goods_image_url'],
'group_price' => $goods_details['min_group_price'],
'normal_price' => $goods_details['min_normal_price'],
'coupon_discount' => $goods_details['coupon_discount'],
'coupon_quantity' => $goods_details['coupon_remain_quantity'],
'promotion_rate' => $goods_details['promotion_rate'],
'sales_quantity' => $goods_details['sales_tip'],
。。。省去其他
];
}
}
<?php
namespace App\Http\Controllers;
use Justmd5\PinDuoDuo\PinDuoDuo;
use App\Http\Requests\JinbaoRequest;
use App\Http\Resources\JinbaoGoodsResource;
class JinbaoController extends Controller
{
private $pinduoduo;
public function __construct()
{
$this->pinduoduo = new PinDuoDuo(config('pdd.jinbao'));
}
public function bounty(JinbaoRequest $request)
{
// 这里 id = 8502887091 写死了 确保可以获取到数据
$info = $this->pinduoduo->api->request('pdd.ddk.goods.detail', ['goods_id_list' => ['8502887091']]);
$goods = new JinbaoGoodsResource($info);
// 下面两种都报错
// Trying to get property 'goods_name' of non-object
return $goods->goods_name;
// Undefined index: goods_name
return $goods['goods_name'];
// return view('show', compact('goods'));
}
}
但是 return $goods
可以返回数据
// return $goods
{
"mall_name": "壹周经营店",
"goods_name": "壹周护板吉他个性贴装饰民谣扫弦贴纸配件保护膜骚气木古典面板",
"goods_thumb": "https://t00img.yangkeduo.com/goods/images/2019-05-16/f001fa0e-7005-4915-b52c-9584b3592142.jpg",
"group_price": 1500,
"normal_price": 1800,
"coupon_discount": 100,
"coupon_quantity": 49000,
"promotion_rate": 180,
"sales_quantity": "990+"
}
// return dd($goods)
App\Http\Resources\JinbaoGoodsResource {#331 ▼
+resource: array:1 [▼
"goods_detail_response" => array:2 [▼
"goods_details" => array:1 [▼
0 => array:57 [▼
"category_name" => "百货"
"mall_name" => "壹周经营店"
"goods_name" => "壹周护板吉他个性贴装饰民谣扫弦贴纸配件保护膜骚气木古典面板"
"goods_image_url" => "https://t00img.yangkeduo.com/goods/images/2019-05-16/f001fa0e-7005-4915-b52c-9584b3592142.jpg"
"coupon_total_quantity" => 50000
。。。省去其他
]
]
"request_id" => "15764620032738056"
]
]
+with: []
+additional: []
}
return $goods->goods_name;
然后报错 Trying to get property 'goods_name' of non-object
return $goods['goods_name'];
也提示 Undefined index: goods_name
感觉 问题是不是在 JinbaoGoodsResource 返回的数据?
经过 JinbaoGoodsResource 处理后 返回的 不应该只是我需要的字段的么
获取非对象的属性。尝试用数组形式获取看看,要不就打印一下
$goods
的类型看看。->withDefault()
没判断是否为空就去取值了
很简单的一个问题,你
new
了一个JsonResource
对象。而这个对象本身,既没有
goods_name
属性,也不是一个数组。当你
return
它的时候,它自己会调用自身toArray
方法,要不你自己提前调用一下?而且你也没必要这么写,resource 的作用不是数据过滤和重构么?
@xolee 最后问题怎么处理了? 是
还是
?
这个问题有意思