2017-03-08 7 views
1

Ich versuche, ein Objekt von meinen Laravel API-Routen zurückzugeben, aber alles, was zurückgegeben wird, ist ein leeres Array.Laravel API gibt nur leere Objekte zurück

Mein Modell sieht wie folgt aus:

class MobilePageStats extends Model 
    { 
     // 
     private $score; 
     private $mobileFriendly; 
     private $numberRobotedResources; 
     private $numberTransientFetchFailureResources; 
     private $transientFetchFailureUrls; 
     private $cms; 
     private $ruleResults; 

     /** 
     * MobilePageStats constructor. 
     * @param int $score 
     * @param bool $mobileFriendly 
     * @param int $numberRobotedResources 
     * @param int $numberTransientFetchFailureResources 
     * @param array $transientFetchFailureUrls 
     * @param string $cms 
     * @param array $ruleResults 
     */ 
     public function __construct(
      $score, 
      $mobileFriendly, 
      $numberRobotedResources, 
      $numberTransientFetchFailureResources, 
      $transientFetchFailureUrls, 
      $cms, 
      $ruleResults 
     ) { 
      $this->score = $score; 
      $this->mobileFriendly = $mobileFriendly; 
      $this->numberRobotedResources = $numberRobotedResources; 
      $this->numberTransientFetchFailureResources = $numberTransientFetchFailureResources; 
      $this->transientFetchFailureUrls = $transientFetchFailureUrls; 
      $this->cms = $cms; 
      $this->ruleResults = $ruleResults; 
     } 

Und ich habe auch Getter auf alles.

Ich habe alle Daten in meinem Controller mit Konstruktor in dieser Funktion:

public function getData() { 
      $cms = ""; 
      $score = $this->data->ruleGroups->USABILITY->score; 
      $mobileFriendly = $this->data->ruleGroups->USABILITY->pass; 
      if(isset($this->data->pageStats->numberRobotedResources)){ 
       $numberRobotedResources = $this->data->pageStats->numberRobotedResources; 
      }else{ 
       $numberRobotedResources = ''; 
      } 
      if(isset($this->data->pageStats->numberTransientFetchFailureResources)){ 
       $numberTransientFetchFailureResources = $this->data->pageStats->numberTransientFetchFailureResources; 
      }else{ 
       $numberTransientFetchFailureResources = ''; 
      } 
      if(isset($this->data->pageStats->transientFetchFailureUrls)){ 
       $transientFetchFailureUrls = $this->data->pageStats->transientFetchFailureUrls; 
      }else{ 
       $transientFetchFailureUrls = ''; 
      } 
      if(isset($this->data->pageStats->cms)){ 
       $cms = $this->data->pageStats->cms; 
       if($cms != 'WORDPRESS' && $cms != 'JOOMLA'){ 
        $cms = $this->checkCMS(); 
       } 
      } 
      $cvp = $this->getConfigureViewport(); 
      $fontSizes = $this->getUseLegibleFontSizes(); 
      $avoidPlugins = $this->getAvoidPlugins(); 
      $sizeToViewport = $this->getSizeContentToViewport(); 
      $tapTargets = $this->getSizeTapTargetsAppropriately(); 
      $ruleResults = [$cvp, $fontSizes, $avoidPlugins, $sizeToViewport, $tapTargets]; 


      $mobilePageStats = new MobilePageStats($score, $mobileFriendly, $numberRobotedResources, 
       $numberTransientFetchFailureResources, $transientFetchFailureUrls, $cms, $ruleResults); 

      return $mobilePageStats; 

     } 

In meinem API Routen ich dann versuchen, das Modell wie folgt zurück:

Route::get('/mobilePageSpeed', function(Request $request){ 
    $data = new PageSpeedMobileController($request->url); 
    return response($data->getData()); 
}); 

Aber alle Ich bekomme zurück, wenn ich die Anfrage mache:

<body> 
<pre style="word-wrap: break-word; white-space: pre-wrap;">[]</pre> 
</body> 

Warum wird das Objekt nicht zurückgegeben? Ich weiß, dass es Daten enthält, weil ich es ausdrucken kann. Aber kann es nicht senden?

Ich habe beide versucht repsonne() -> json ($ data-> getData()); Und json_encode ($ data-> getData()), aber sie geben mir das gleiche Ergebnis? Ich kann einfach keine Lösung finden, die funktioniert.

Wie also gebe ich Objekte von Laravel Api zurück?

Antwort

1

Die Antwort wäre jede einzelne json_encode Objekt, nachdem Sie sie in Arrays umgewandelt haben. Sollte funktionieren :)

+0

Schön, das hat den Trick gemacht !! Aber ich musste es immer noch als Antwort zurückgeben – user2926430

0

Sie überschreiben den ursprünglichen Modellkonstruktor mit Ihrer Version, das Modell ist nicht mit Attributen gefüllt oder gestartet.

Ich weiß nicht, was Sie erreichen wollen, aber wenn Sie eine Klasse von Eloquent \ Modell erweitert Sie nicht der Fall eigene costructor außer Kraft setzen kann, ohne die ursprüngliche Aufruf, das heißt:

public function __construct(array $attributes = []) 
{ 
    parent::__construct($attributes); 
+0

Ich habe versucht, das erweiterte Modell zu entfernen, weil ich wirklich nicht die Erweiterung des Modells brauche, soweit ich weiß. Aber das ergab das gleiche Ergebnis. Ich denke also nicht, dass dies mein Problem lösen wird. – user2926430

+0

Ich möchte nicht unhöflich sein, aber wenn es das gleiche für dich ist, erstreckt sich von Model oder nicht ich kann dir nicht folgen: Ich habe keine Zeit für ein Spiel versuchen und erneut versuchen. Ich habe auf ein wichtiges Thema Ihres Codes hingewiesen, machen Sie Ihre Hausaufgaben und Ihre Versuche und wenn Sie noch Probleme haben, stellen Sie eine andere Frage. – dparoli

+1

Ich verstehe, und ich habe versucht, Elternkonstrukt hinzuzufügen, aber das hat mein Problem nicht gelöst. Der Grund, dass ich nicht denke, ist für mich notwendig, Modell zu erweitern, ist, weil es nur erzeugtes Objekt ist, dass ich es nicht in einer Datenbank oder irgendetwas, seinen Zweck speichern, nur um meine Daten zu halten. Ich bin dankbar dafür, dass Sie Ihre Zeit verwendet haben, um in mein Problem zu sehen, aber ich habe meine Hausaufgaben gemacht, versuchte fast jede Lösung, die ich finden konnte, aber es funktioniert immer noch nicht. – user2926430

Verwandte Themen