2017-01-18 33 views
0

我用Laravel 5和Dingo/API开发了一个API。Laravel:Dingo/API分页自定义根密钥

继文档,我用分页和我的代码看起来像

$users = User::paginate(50); 

return $this->response->paginator($users, new UserTransformer); 

不幸的是,响应根密钥是“数据”

{ 
"data": [ 
{ 
    "id": 1, 
    "username": "superuser", 
...... 

我想改变“数据“是自定义的关键,因为在我的例子中,emberjs得到了这个响应,并试图与一个不存在的”datum“模型建立链接,在大小写的情况下,需要使用与ember模型同名的关键字的RESTAdapter。

我已经尝试过的响应,但没有改变

return $this->response->paginator($users, new UserTransformer, ['key' => 'users']); 

return $this->response->paginator($users, new UserTransformer, ['identifier' => 'users']); 

没有工作的一些参数,我是坚持与“数据”键。

有人有解决方案吗?

预先感谢您。

回答

1

我设法解决了我的问题。

我不修改api.php配置,变压器保持不变

'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class), 

首先我创建了一个新的串行

// app/Api/V1/Serializers/CustomJsonSerializer.php 

<?php namespace App\Api\V1\Serializers; 

use League\Fractal\Pagination\CursorInterface; 
use League\Fractal\Pagination\PaginatorInterface; 
use League\Fractal\Serializer\SerializerAbstract; 


/** 
* Create a new Serializer in your project 
*/ 
use League\Fractal\Serializer\ArraySerializer; 

class CustomJsonSerializer extends ArraySerializer 
{ 
    public function collection($resourceKey, array $data) 
    { 
     if ($resourceKey === false) { 
      return $data; 
     } 
     return array($resourceKey ?: 'data' => $data); 
    } 

    public function item($resourceKey, array $data) 
    { 
     if ($resourceKey === false) { 
      return $data; 
     } 
     return array($resourceKey ?: 'data' => $data); 
    } 
} 

而且我设置AppServiceProviders

在我的新的自定义序列
// app\Providers\AppServiceProviders.php 

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use Dingo\Api\Transformer\Adapter\Fractal; 
use League\Fractal\Manager; 
use App\Api\V1\Serializers\CustomJsonSerializer; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     $this->app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) { 
      $fractal = new Manager(); 
      $fractal->setSerializer(new CustomJsonSerializer()); 
      return new Fractal($fractal); 
     }); 
    } 

    /** 
    * Register any application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

我希望它能帮助ppl :)

-1

或者你可以使用类似这样的东西

Answer::where('question_id', '=', $questionId) 
    ->join('articles', 'answers.article_id', '=', 'articles.id') 
    ->orderBy('count_thanks', 'desc') 
    ->limit($perPage) 
    ->offset($offset) 
    ->get();