检索json数据。但是有这个错误 - "试图获得非对象的属性"

时间:2017-08-09 03:23:01

标签: php laravel laravel-blade

我还是laravel的新手。

我在JSON中得到了这个结果,我希望获得“生物”这个结果。在' user_details'内。

{
    "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);
    }
}

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

3 个答案:

答案 0 :(得分:1)

你应该这样使用:

<?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
?>

答案 1 :(得分:1)

如果您要发送JSON回复

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

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

如果您要发送数据进行观看

然后在你的控制器中:

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

然后在你看来:

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

答案 2 :(得分:0)

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

控制器代码:

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

在这里你需要在views / users / index.blade.php里面有一个刀片文件,你可以在那里调用{{$ user-&gt; user_details-&gt; bio}},因为你仍然使用用户模型而不是json&#34;字符串&#34;。