如何在Laravel中修复“试图获取非对象的属性'id'”?

时间:2019-04-02 15:21:36

标签: laravel-5 axios

我在从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'”。

1 个答案:

答案 0 :(得分:0)

TL; DR

这是因为obj变量是数组而不是对象。您的问题的解决方案是:

return $request->obj['id'];

其他说明

在Laravel的Request实例上调用不存在的属性时,将调用名为__get()的魔术方法。此方法检查您刚刚调用的属性在请求正文中是否存在。如果是这样,它将返回该值。当将对象或数组发送到您的Laravel应用时,请求(或更好的说PHP)将这些值作为数组接收。这就是为什么您需要通过数组而不是通过对象访问id变量的原因。

顺便说一句,如果没有在请求正文中的obj变量中发送ID,则该代码将失败,因为它不存在要键入的密钥。您可能要验证请求正文的数据。在Laravel docs中了解更多信息。