2017-03-08 8 views
1

私のLaravel APIルートからオブジェクトを返そうとしていますが、返されるのは空の配列です。Laravel Apiは空のオブジェクトのみを返します

私のモデルは次のようになります。

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

そして私はまた、すべてのものの上にゲッターを得ました。

私は、この機能では、コンストラクタで私のコントローラ内のすべてのデータを設定します。私のAPIのルートで

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; 

     } 

を私は、このようなモデルを返すようにしてみてください。

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

しかし、すべての

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

なぜオブジェクトが返されないのですか?私はそれが印刷できるので、データが含まれていることを知っています。しかし、それを送ることはできないのですか?

私はrepsonse() - > json($ data-> getData())を試しました。そして、json_encode($ data-> getData())でも同じ結果が得られますか?私はちょうど解決策を見つけることができないようです。

Laravel Apiからオブジェクトを返すにはどうすればよいですか?

答えて

1

答えは一つ一つをjson_encodeことであろうオブジェクトを配列にキャストした後に仕事が必要です:

+0

ニース、それはトリックをした!しかし、私はまだそれをjsonレスポンスとして返さなければならなかった – user2926430

0

オリジナルのModelコンストラクタをバージョンで上書きします。モデルには属性が設定されておらず、起動されません。

私はあなたが達成したいのか知らないが、あなたは雄弁\モデルからクラスを拡張する場合、あなたがオーバーライドすることができない、すなわち、オリジナルのものを呼び出すことなく、自分のcostructorです:

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

私はモデルの拡張を削除しようとしましたが、私が知る限り、実際にはモデルの拡張は必要ありません。しかし、これは同じ結果をもたらした。だから私はこれが私の問題を解決するとは思わない。 – user2926430

+0

私は失礼になりたくありませんが、あなたのために同じことがモデルから拡張されているかどうか、私はあなたに従いません:私は試して再試行のゲームの時間がありません。私はあなたのコードの重要な問題を指摘し、あなたの宿題とあなたの試行を行います。 – dparoli

+1

私はあなたのポイントを取得し、私は親の構造を追加しようとしましたが、これは私の問題を解決しませんでした。 モデルを拡張するために私が必要とは思わない理由は、生成されたオブジェクトだけで、データベースなどに保存しないためです。目的はデータを保持することだけです。 私の問題を調べるためにあなたの時間を費やしたことに感謝しますが、私は宿題をして、私が見つけることができるほぼすべてのソリューションを試しましたが、まだ動作していません。 – user2926430

関連する問題