【问题标题】:Dingo Api Transformer not working properly. Return array instead of the transformerDingo Api 变压器无法正常工作。返回数组而不是转换器
【发布时间】:2016-11-23 05:07:16
【问题描述】:

这是我的第一个 Dingo Api 实现。这是我的

RoleTransformer

namespace App\Api\V1\Transformers;

use League\Fractal\TransformerAbstract;
use App\Role;

class RoleTransformer extends TransformerAbstract
{

    public function transform(Role $role)
    {

        return [
            'role_id' => (int)$role->id,
            'name'    => $role->name
        ];
    }

}

这是RoleController

namespace App\Http\Controllers;

use Dingo\Api\Routing\Helpers;
use Illuminate\Http\Request;
use Dingo\Api\Http\Response;
use App\Role;
use App\Http\Requests;
use App\Api\V1\Transformers\RoleTransformer;

class RoleController extends Controller
{
    use Helpers;

    public function index(){
        $roles = Role::all();

        return $this->response->collection($roles, new RoleTransformer())
                              ->setStatusCode(200);
    }
}

虽然我应该只得到role_idname

[

    {
        "id": 1,
        "name": "admin",
        "display_name": "Admin",
        "description": "Administrator",
        "created_at": "2016-07-18 08:11:44",
        "updated_at": "2016-07-18 08:11:44"
    },
    {
        "id": 2,
        "name": "director",
        "display_name": "Director",
        "description": "Country Manager",
        "created_at": "2016-07-18 08:11:44",
        "updated_at": "2016-07-18 08:11:44"
    },
    {
        "id": 3,
        "name": "manager",
        "display_name": "Manager",
        "description": "Team Manager",
        "created_at": "2016-07-18 08:11:44",
        "updated_at": "2016-07-18 08:11:44"
    }

]

不知道我做错了什么。

使用 Laravel 5.2 和 Dingo 1.0.x@dev。

【问题讨论】:

  • 找到了解决方案。在config/api.php 中,url 前缀设置为'prefix' => env('API_PREFIX', 'api');,但在我的路由中,我在没有api 前缀的情况下进行测试。一旦我在路由中设置api,它的工作就像一个魅力。

标签: laravel api laravel-5 dingo-api


【解决方案1】:

这部分不应该是:

public function index(){
    $roles = Role::all();
    $rt = new RoleTransformer();

    return $this->response->collection($roles, $rt->transform($roles))
                          ->setStatusCode(200);
}

或者你可以让构造函数只输出id和name??如果有帮助,请告诉我!

【讨论】:

  • 抱歉,这个解决方案不起作用。 transform() 返回数组和 collection() 的第二个参数需要是一个 Transformer 类。我提交的代码是 dingo 文档的完整副本..
【解决方案2】:

同样的问题,但我有前缀'api',仍然无法工作。用代码调试的时候,响应已经按我的要求处理了,在后面的代码之后,就恢复了!

 //vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php
public function handle($request)
{
.
.
.
    $this->app['events']->dispatch(
            new Events\RequestHandled($request, $response)
        );

        return $response;
}

laravel 5.8.38 , 野狗 2.4.7

【讨论】:

  • 已解决,我有一个自定义事件监听器重置响应的内容,简直是太傻了!
猜你喜欢
  • 2018-06-03
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 2017-08-22
相关资源
最近更新 更多