Laravel中Guzzle请求变量传视图报错:Trying to get property of non-object
问题原因及解决方案
这个问题我太熟了!你遇到的错误根源其实很简单——你把JSON响应转换成了关联数组,但视图里却用了对象的属性访问语法。
具体分析:
在你的控制器代码中,这一行是关键:
$clientes = json_decode($result, true);
json_decode的第二个参数设为true时,会将JSON字符串解析成关联数组;如果省略这个参数(或者设为false),则会解析成stdClass对象。
而你的Blade视图里,却用了对象的访问方式:
<td>{{$value->name}}</td>
PHP尝试从一个数组($value是数组)中获取对象属性,自然会抛出Trying to get property of non-object的错误。
两种解决方法:
你可以任选一种来修复这个问题:
方法1:修改控制器,让JSON解析为对象
把json_decode的第二个参数去掉,同时调整items的访问方式为对象属性:
$client = new Client(); $res = $client->request('GET', 'https://api.iugu.com/v1/customers?api_token=secret'); $result = $res->getBody(); $clientes = json_decode($result); // 去掉true参数,返回对象 return view('sections.client.index')->with('clients', $clientes->items); // 用->访问items属性
方法2:保持数组解析,修改视图为数组访问语法
控制器代码不变,把视图里的对象访问改成数组键名访问:
@foreach($clients as $value) <tr> <td>{{$value['name']}}</td> <td>{{$value['email']}}</td> <td>{{$value['number']}}</td> </tr> @endforeach
额外提醒:
虽然你确认JSON里有对应值,但还是建议你临时在控制器里加一行dd($clientes['items']);,打印出实际的数组结构,确认name、email、number这些键名的拼写和大小写是否完全匹配,避免因为键名错误导致的其他问题。
内容的提问来源于stack exchange,提问作者Vinícius
相关产品推荐
相关产品推荐

