我正在尝试从Angular应用程序的请求中访问对象属性。我正在使用Laravel 5.1
角:
console.log('getQuestionAnswers', params);
return $http({
method: 'GET',
url: url + ver + '/questions/checkMany',
params: {
'questions[]' : params
},
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + $rootScope.access_token
},
cache: true
});
params的Console.log:
Laravel:
public function getAnswers(Request $request)
{
$input = $request->all();
$question_objs = $input['questions'];
foreach ($question_objs as $question_answer_object) {
return $question_answer_object;
对Angular的回应:return $question_objs;
对Angular的回应:return $question_answer_object;
到目前为止看起来很好!
但是如果我尝试访问laravel中的属性,例如question_id:
return $question_answer_object['question_id'];
我收到错误:
"非法字符串偏移' question_id'
Laravel已经解析了JSON,
// From Illuminate/Http/Request.php all() method:
if (! isset($this->json)) {
$this->json = new ParameterBag((array) json_decode($this->getContent(), true));
}
当我退回时,我可以看到它是一个物体。为什么我无法访问这些属性?我没有运气就试过json_decode
。
使用JSON解码:
$test = json_decode($question_answer_object, true);
return $test['question_id'];
这似乎有效。但为什么呢?
访问对象上的属性:
return $question_answer_object->question_id;
给出以下错误:
"试图获得非对象的属性"
答案 0 :(得分:1)
$question_answer_object['question_id']
变量是一个包含JSON编码数据的字符串;要访问它,您需要先解码它:
$decoded= json_decode($question_answer_object['question_id'], true);
return $decoded['question_id'];
如果您未将请求作为application / json发送,请使用$request->json()
。
您可以获得有关此问题的一些信息 here。
答案 1 :(得分:0)
返回的问题是一个对象,而不是一个数组。您必须使用->
return $question_answer_object->question_id;