我正在传递带有3个变量的POST请求
Id (Randomly Generated),
Name (Specified)
Capacity (Specified)
来自Angular Service帖子。这些位于POST的有效负载中,也可以在Laravel资源控制器方法“ store()”的$request
变量中看到。
public function store(Request $request)
{
$servers = new Server();
return $request->getContent();
}
在Chrome的开发人员工具中>网络> POST请求>在预览中,我得到了
[{name: "bakar", capacity: 50, id: 8012}]
0: {name: "bakar", capacity: 50, id: 8012}
但是当我使用
public function store(Request $request)
{
$servers = new Server();
$data = $request->getContent();
$servers->id = $data->id;
$servers->name = $data->name;
$servers->capacity = $data->capacity;
$servers->save();
}
在上述方法中,我得到了一个错误异常说明:
“试图获取非对象的属性”
我该如何解决?
答案 0 :(得分:0)
根据您的JSON示例,$data
应该包含一个数组,然后该数组的第一个索引包含一个对象。
因此,您无法执行$data->id
,因为假设$ data具有一个名为$ id的属性,而...没有,对象在其第一个索引处具有。
因此简单地$data[0]->id
将允许您访问该索引,然后访问该索引处的对象的$ id属性。当然,如果您的请求在数组中包含多个项目,则可能需要使用循环来遍历所有项目并获取值。这取决于您的期望以及您打算如何做。
或者,可能是您的PHP是正确的,并且是您的客户端以错误的格式发送数据。目前尚不清楚预期的结果到底是什么。
编辑:
由于$data
似乎在到达store()函数时仍然是JSON字符串,因此您需要对其进行解码。所以先写
$data = json_decode($request->getContent());
(而不是$data = $request->getContent();
),然后按照上述步骤进行操作。
完整样本:
public function store(Request $request)
{
$servers = new Server();
$data = json_decode($request->getContent());
$servers->id = $data[0]->id;
$servers->name = $data[0]->name;
$servers->capacity = $data[0]->capacity;
$servers->save();
}