【问题标题】:Retrieve json data. but having this error - "Trying to get property of non object"检索 json 数据。但出现此错误 - “尝试获取非对象的属性”
【发布时间】:2018-01-16 18:46:51
【问题描述】:

我还是 laravel 的新手。

我有这个 JSON 格式的结果,我想在“user_details”中获取“bio”。

{
    "id": 1,
    "name": "Jasper Mendiola",
    "username": "jasperduane77",
    "created_at": "2017-07-22 10:11:04",
    "updated_at": "2017-07-22 10:11:04",
    "userType": "Administrator",
    "user_details": {
        "user_id": 1,
        "profile_pic": null,
        "bio": "frustrated software blahblahblah"
    }

我在我的视图中尝试了这段代码

{{$user->user_details->bio}}

但我有错误

> 试图获取非对象的属性

这是我的 laravel 控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\UserDetail;
use DB;

class UsersController extends Controller
{

    public function __construct() {
        $this->middleware('auth');
    }

    public function index()
    {
        //
        $user_id = auth()->user()->id;

        $user = User::with('userDetails')->find($user_id);

        /**** When I enter this code, I get the error
        return view('profile.index')->with('user', $user); */

        return json_encode($user);
    }
}

您是如何做到这一点的?非常感谢您的帮助。

【问题讨论】:

标签: php laravel laravel-blade


【解决方案1】:

如果您想发送 JSON 响应

在您的控制器中,只需将 return json_encode($user); 替换为 return $user;

它会自动发送 $user 作为 json 响应。如果您将使用 return json_encode($user); 它只会以字符串格式发送 json 响应,您需要在视图中使用 json_decode() 将此字符串转换为数组或对象。

如果您想发送数据以查看

然后在你的控制器中:

return view('profile.index', ['user' => $user]);

那么在你看来:

{{$user->user_details->bio}}

【讨论】:

  • 也有效。我只需要添加这个 $user = json_decode($user);在将其传递给视图函数之前。
【解决方案2】:

您正在返回一个 json 字符串,这对于 API 请求来说会很酷。 laravel 这样做的方式是使用 view() 以便我们可以渲染刀片模板。在这种情况下,您应该这样做:

控制器代码:

return view('users.index', [ 'user' => $user ]);

在这里,您需要一个位于 views/users/index.blade.php 中的刀片文件,并且您可以在其中调用 {{$user->user_details->bio}},因为您仍在使用 User 模型而不是 json “字符串”。

【讨论】:

  • 错误仍然存​​在。您应该先解码 json 对象,然后才能将其传递给视图函数。
  • @jDmendiola,user_details 是否定义为 key->value 数组?在这种情况下,您可以使用 {{ $user->user_details['bio'] }}。模型的编解码感觉不对
【解决方案3】:

你应该这样使用:

<?php
$jsonData = '{
    "id": 1,
    "name": "Jasper Mendiola",
    "username": "jasperduane77",
    "created_at": "2017-07-22 10:11:04",
    "updated_at": "2017-07-22 10:11:04",
    "userType": "Administrator",
    "user_details": {
        "user_id": 1,
        "profile_pic": null,
        "bio": "frustrated software blahblahblah"
    }
}';
$josnObj = json_decode($jsonData); 
echo $josnObj->user_details->bio;//frustrated software blahblahblah
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2015-09-22
    • 2016-04-15
    • 2019-03-21
    • 2016-12-23
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多