2017-03-08 37 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; 
     } 

而且我也得到了一切干将。

我把所有的数据在我与构造控制,在这个函数:

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; 

     } 

在我的API的路线,然后我尝试返回模式是这样的:

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

您可以用您的版本覆盖原始模型构造函数,该模型不会被填充属性也不会引导。

我不知道你想实现什么,但如果你扩展从洋洋洒洒\型号一类不能覆盖是自己costructor而不调用原单,即:

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

我试着去除扩展模型,因为我真的不需要扩展模型,据我所知。但是,这给出了相同的结果。所以我认为这不会解决我的问题。 – user2926430

+0

我不想粗鲁,但如果它从你的模型延伸相同,我不能跟着你:我没有时间尝试和重试游戏。我指出了你的代码的一个重要问题,做你的功课和你的尝试,如果你还有问题发布另一个问题。 – dparoli

+1

我明白了你的观点,并且试图添加父构造,但是这并没有解决我的问题。 我不认为扩展模型是必须的,因为它只是生成对象,我不把它保存在数据库或其他东西中,其目的只是为了保存我的数据。 我很感谢你利用你的时间来研究我的问题,但我确实做了功课,尝试了几乎所有我能找到的解决方案,但仍然无法正常工作。 – user2926430