Laravel 响应转换不起作用

Posted

技术标签:

【中文标题】Laravel 响应转换不起作用【英文标题】:Laravel response transformations not working 【发布时间】:2016-04-02 00:25:17 【问题描述】:

我有以下

控制器功能

 public function show()
    
        $users_id = Request::segment(4);
//        $this->user_bank_details_repository->setPresenter(new UserBankAccountPresenter);
        $account = $this->user_bank_details_repository->findByField('users_id', $users_id, $columns = ['user_bank_details_id','bank_name','bank_account_number','bank_ifsc_code','beneficiary_name','bank_account_type','bank_branch','created_at']);
        if(!$account)
        
           return $this->response->noContent();
        
        return $this->response->item($account, new UserBankAccountTransformer);
    

变压器

   <?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
namespace App\Api\V1\Transformers;

use App\Entities\UserBankDetails;
use League\Fractal\TransformerAbstract;

class UserBankAccountTransformer extends TransformerAbstract 

    public function transform(UserBankDetails $bank_details)
    
            return [
                'id'=> (int) $bank_details->user_bank_details_id,
                'bank_name'     => $bank_details->bank_name,
                'bank_account_number' => (int) $bank_details->bank_account_number,
                'bank_account_type' => $bank_details->bank_account_type,
                'bank_beneficiary_name' => $bank_details->beneficiary_name,
                'bank_branch'=> $bank_details->bank_branch
            ];
    

我正在使用存储库模式设计并为我的 REST 框架使用 dingo。

我总是得到响应


  "user_bank_details": [
    
      "user_bank_details_id": 1,
      "bank_name": "jbjb",
      "bank_account_number": "939393933939",
      "bank_ifsc_code": "ABCD0000047",
      "beneficiary_name": "Gaf",
      "bank_account_type": "savings",
      "bank_branch": "Mad(E)",
      "created_at": "2015-12-23 17:05:39"
    
  ]

而不是转换后的 json。我也没有收到任何错误。尝试使用

 return $this->response->item($account, new UserBankAccountTransformer::class);

但是响应仍然没有改变。我尽我所能,但我没有得到它的工作:(

【问题讨论】:

那么item 响应的具体方法是什么?这不是 Laravel 的默认响应,不是吗? @MarcinNabiałek Right.它不是 laravel。我正在使用 Dingo 框架。 github.com/dingo 。在他们的文档中提到使用它来响应响应。 【参考方案1】:

尽管这个问题是一年多以前的问题,但是对于任何有类似问题的人来说,这里的嫌疑人是您使用的事实:item 而不是collection

如果$account包含一个集合,那么就说明这个答案是正确的:也就是这个:

return $this->response->item($account, new UserBankAccountTransformer::class);

应该是:

return $this->response->collection($account, new UserBankAccountTransformer::class);

PS:我也在 Laravel 5.2 上遇到过这个问题。*这就是为什么我觉得这可能会有所帮助。

【讨论】:

以上是关于Laravel 响应转换不起作用的主要内容,如果未能解决你的问题,请参考以下文章

集合验证不起作用 + laravel

axios响应后scrollTop不起作用

Angular:Typescript 将 JSON 响应转换为对象模型不起作用

Laravel 8 多对多关系不起作用(没有抛出错误)

Laravel 导航栏切换在 bootstrap 4.4.1 和 jquery 3.3 上不起作用

jwt/tymon 到期时间不起作用