2016-07-17 5 views
0

Ich versuche, auf Objekteigenschaften von einer Anfrage aus meiner Angular-App zuzugreifen. Ich verwende Laravel 5.1Zugriff auf Objekteigenschaften über URL-Parameter in Laravel nicht möglich

Eckig:

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

console.log von params:

enter image description here

Laravel:

public function getAnswers(Request $request) 
{ 
    $input = $request->all(); 

    $question_objs = $input['questions']; 

    foreach ($question_objs as $question_answer_object) { 
     return $question_answer_object; 

Antwort auf Angular mit: return $question_objs;

enter image description here

Antwort auf Angular mit: return $question_answer_object;

enter image description here

Sieht aus wie so weit, so gut!


Aber wenn ich versuchen, eine Eigenschaft innerhalb Laravel zuzugreifen, wie question_id:

return $question_answer_object['question_id'];

ich Fehler:

"Illegal string offset 'question_id'

Laravel bereits die JSON parst,

// From Illuminate/Http/Request.php all() method: 

    if (! isset($this->json)) { 
     $this->json = new ParameterBag((array) json_decode($this->getContent(), true)); 
    } 

und wenn ich es zurückgebe, kann ich sehen, dass es ein Objekt ist. Warum kann ich nicht auf die Eigenschaften zugreifen? Ich habe auch json_decode ohne Glück versucht.


Mit JSON Decode:

$test = json_decode($question_answer_object, true); 
return $test['question_id']; 

Dies scheint zu funktionieren. Aber warum?


Zugriff auf die Eigenschaft auf dem Objekt als solches:

return $question_answer_object->question_id; 

ergibt folgende Fehler:

"Trying to get property of non-object"

+0

@ChoncholMahmud plz siehe oben versuchen mit JSON decode – Growler

+0

@ChoncholMahmud okay, es hat funktioniert. Aber ich dachte Laravels '$ request-> all()' '' 'return array_replace_recursive ($ this-> input(), $ this-> files-> all());' und rekursiv 'json_decodes'? Können Sie erklären? – Growler

Antwort

1

$question_answer_object['question_id'] Die Variable ist ein String, umfassend JSON codierte Daten; dass besuchen, müssen Sie sie entschlüsseln zuerst:

$decoded= json_decode($question_answer_object['question_id'], true); 
return $decoded['question_id']; 

Wenn Sie nicht die Anforderung als application/json Senden $request->json() verwenden. Sie können einige Informationen über dieses Problem here erhalten.

0

Retour Frage ist ein Objekt, kein Array. Sie müssen es mit acces ->

return $question_answer_object->question_id; 
+0

Ich kann nicht auf eine Eigenschaft auf einem Objekt mit 'obj ['key']' zugreifen? – Growler

+0

Nicht, es sei denn, das Objekt implementiert die 'ArrayAccess'-Schnittstelle, die von' json_decode' zurückgegebene 'stdClass' nicht enthält. – Finwe

+0

Bitte siehe oben Bearbeiten. Ich bekomme '' Versuchen, Eigenschaft von Nicht-Objekt zu bekommen '' – Growler