我在从axios传递到PHP laravel资源控制器的前端获取对象属性时遇到问题。
axios({
method:post,
url: ...
data: {
obj: {id:1,name:'Foo',age:25}
}
})
public function store(Request $request)
{
$res = $request->obj->id;
return $res;
}
我期望返回值为1,但在控制台中会显示“试图获取非对象的属性'id'”。
答案 0 :(得分:0)
TL; DR
这是因为obj
变量是数组而不是对象。您的问题的解决方案是:
return $request->obj['id'];
其他说明
在Laravel的Request
实例上调用不存在的属性时,将调用名为__get()
的魔术方法。此方法检查您刚刚调用的属性在请求正文中是否存在。如果是这样,它将返回该值。当将对象或数组发送到您的Laravel应用时,请求(或更好的说PHP)将这些值作为数组接收。这就是为什么您需要通过数组而不是通过对象访问id变量的原因。
顺便说一句,如果没有在请求正文中的obj
变量中发送ID,则该代码将失败,因为它不存在要键入的密钥。您可能要验证请求正文的数据。在Laravel docs中了解更多信息。