检索 json 数据。但是有这个错误 - "Trying to get property of non object"
Retrieve json data. but having this error - "Trying to get property of non object"
我还是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
$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
?>
如果要发送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}}
您要返回一个 json 字符串,这样对于 API 请求来说会很酷。 laravel 这样做的方式是使用 view() 所以我们可以渲染一个 blade 模板。在这种情况下,您应该这样做:
控制器代码:
return view('users.index', [ 'user' => $user ]);
在这里你需要一个 blade 文件在 views/users/index.blade.php 里面你可以调用 {{$user->user_details->bio }} 因为您仍在使用 User 模型而不是 json "string".
我还是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
$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
?>
如果要发送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}}
您要返回一个 json 字符串,这样对于 API 请求来说会很酷。 laravel 这样做的方式是使用 view() 所以我们可以渲染一个 blade 模板。在这种情况下,您应该这样做:
控制器代码:
return view('users.index', [ 'user' => $user ]);
在这里你需要一个 blade 文件在 views/users/index.blade.php 里面你可以调用 {{$user->user_details->bio }} 因为您仍在使用 User 模型而不是 json "string".